[
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "contract BoringVault",
"name": "boringVault",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "contract BoringVault",
"name": "boringVault",
"type": "address"
},
{
"internalType": "contract AccountantWithRateProviders",
"name": "accountant",
"type": "address"
}
],
"name": "balanceOfInAssets",
"outputs": [
{
"internalType": "uint256",
"name": "assets",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "contract ERC20",
"name": "depositAsset",
"type": "address"
},
{
"internalType": "uint256",
"name": "depositAmount",
"type": "uint256"
},
{
"internalType": "contract BoringVault",
"name": "boringVault",
"type": "address"
},
{
"internalType": "contract TellerWithMultiAssetSupport",
"name": "teller",
"type": "address"
}
],
"name": "checkUserDeposit",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "contract ERC20",
"name": "depositAsset",
"type": "address"
},
{
"internalType": "uint256",
"name": "depositAmount",
"type": "uint256"
},
{
"internalType": "contract TellerWithMultiAssetSupport",
"name": "teller",
"type": "address"
}
],
"name": "checkUserDepositWithPermit",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract AccountantWithRateProviders",
"name": "accountant",
"type": "address"
}
],
"name": "exchangeRate",
"outputs": [
{
"internalType": "uint256",
"name": "rate",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "asset",
"type": "address"
},
{
"internalType": "contract BoringOnChainQueue",
"name": "queue",
"type": "address"
}
],
"name": "getWithdrawAsset",
"outputs": [
{
"components": [
{
"internalType": "bool",
"name": "allowWithdraws",
"type": "bool"
},
{
"internalType": "uint24",
"name": "secondsToMaturity",
"type": "uint24"
},
{
"internalType": "uint24",
"name": "minimumSecondsToDeadline",
"type": "uint24"
},
{
"internalType": "uint16",
"name": "minDiscount",
"type": "uint16"
},
{
"internalType": "uint16",
"name": "maxDiscount",
"type": "uint16"
},
{
"internalType": "uint96",
"name": "minimumShares",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "withdrawCapacity",
"type": "uint256"
}
],
"internalType": "struct BoringOnChainQueue.WithdrawAsset",
"name": "withdrawAsset",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "assets",
"type": "address[]"
},
{
"internalType": "contract BoringOnChainQueue",
"name": "queue",
"type": "address"
}
],
"name": "getWithdrawAssets",
"outputs": [
{
"components": [
{
"internalType": "bool",
"name": "allowWithdraws",
"type": "bool"
},
{
"internalType": "uint24",
"name": "secondsToMaturity",
"type": "uint24"
},
{
"internalType": "uint24",
"name": "minimumSecondsToDeadline",
"type": "uint24"
},
{
"internalType": "uint16",
"name": "minDiscount",
"type": "uint16"
},
{
"internalType": "uint16",
"name": "maxDiscount",
"type": "uint16"
},
{
"internalType": "uint96",
"name": "minimumShares",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "withdrawCapacity",
"type": "uint256"
}
],
"internalType": "struct BoringOnChainQueue.WithdrawAsset[]",
"name": "withdrawAssets",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract TellerWithMultiAssetSupport",
"name": "teller",
"type": "address"
}
],
"name": "isTellerPaused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract BoringOnChainQueue",
"name": "queue",
"type": "address"
},
{
"internalType": "address",
"name": "assetOut",
"type": "address"
},
{
"internalType": "uint128",
"name": "amountOfShares",
"type": "uint128"
},
{
"internalType": "uint16",
"name": "discount",
"type": "uint16"
}
],
"name": "previewAssetsOut",
"outputs": [
{
"internalType": "uint128",
"name": "amountOfAssets",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract ERC20",
"name": "depositAsset",
"type": "address"
},
{
"internalType": "uint256",
"name": "depositAmount",
"type": "uint256"
},
{
"internalType": "contract BoringVault",
"name": "boringVault",
"type": "address"
},
{
"internalType": "contract AccountantWithRateProviders",
"name": "accountant",
"type": "address"
}
],
"name": "previewDeposit",
"outputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "contract ERC20",
"name": "withdrawAsset",
"type": "address"
},
{
"internalType": "uint256",
"name": "shareAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minimumAssets",
"type": "uint256"
},
{
"internalType": "contract BoringVault",
"name": "boringVault",
"type": "address"
},
{
"internalType": "contract AccountantWithRateProviders",
"name": "accountant",
"type": "address"
},
{
"internalType": "contract TellerWithYieldStreaming",
"name": "teller",
"type": "address"
},
{
"internalType": "contract IBufferLens",
"name": "bufferLens",
"type": "address"
}
],
"name": "previewInstantWithdraw",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "assetsOut",
"type": "uint256"
},
{
"internalType": "bool",
"name": "tellerPaused",
"type": "bool"
},
{
"internalType": "bool",
"name": "withdrawsNotAllowed",
"type": "bool"
},
{
"internalType": "bool",
"name": "noShares",
"type": "bool"
},
{
"internalType": "bool",
"name": "sharesLocked",
"type": "bool"
},
{
"internalType": "bool",
"name": "notEnoughWithdrawableAssets",
"type": "bool"
},
{
"internalType": "bool",
"name": "minimumAssetsNotMet",
"type": "bool"
},
{
"internalType": "uint256",
"name": "withdrawableAssets",
"type": "uint256"
}
],
"internalType": "struct ArcticArchitectureLens.PreviewInstantWithdrawResult",
"name": "res",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint96",
"name": "nonce",
"type": "uint96"
},
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "address",
"name": "assetOut",
"type": "address"
},
{
"internalType": "uint128",
"name": "amountOfShares",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "amountOfAssets",
"type": "uint128"
},
{
"internalType": "uint40",
"name": "creationTime",
"type": "uint40"
},
{
"internalType": "uint24",
"name": "secondsToMaturity",
"type": "uint24"
},
{
"internalType": "uint24",
"name": "secondsToDeadline",
"type": "uint24"
}
],
"internalType": "struct BoringOnChainQueue.OnChainWithdraw",
"name": "req",
"type": "tuple"
},
{
"internalType": "contract BoringVault",
"name": "boringVault",
"type": "address"
},
{
"internalType": "contract BoringOnChainQueue",
"name": "queue",
"type": "address"
},
{
"internalType": "contract TellerWithYieldStreaming",
"name": "teller",
"type": "address"
},
{
"internalType": "contract IBufferLens",
"name": "bufferLens",
"type": "address"
}
],
"name": "previewWithdraw",
"outputs": [
{
"components": [
{
"internalType": "bool",
"name": "withdrawsNotAllowed",
"type": "bool"
},
{
"internalType": "bool",
"name": "withdrawNotMatured",
"type": "bool"
},
{
"internalType": "bool",
"name": "deadlinePassed",
"type": "bool"
},
{
"internalType": "bool",
"name": "noShares",
"type": "bool"
},
{
"internalType": "bool",
"name": "notEnoughAssetsForWithdraw",
"type": "bool"
},
{
"internalType": "uint256",
"name": "withdrawableAssets",
"type": "uint256"
}
],
"internalType": "struct ArcticArchitectureLens.PreviewWithdrawResult",
"name": "res",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint96",
"name": "nonce",
"type": "uint96"
},
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "address",
"name": "assetOut",
"type": "address"
},
{
"internalType": "uint128",
"name": "amountOfShares",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "amountOfAssets",
"type": "uint128"
},
{
"internalType": "uint40",
"name": "creationTime",
"type": "uint40"
},
{
"internalType": "uint24",
"name": "secondsToMaturity",
"type": "uint24"
},
{
"internalType": "uint24",
"name": "secondsToDeadline",
"type": "uint24"
}
],
"internalType": "struct BoringOnChainQueue.OnChainWithdraw[]",
"name": "requests",
"type": "tuple[]"
},
{
"internalType": "contract BoringVault",
"name": "boringVault",
"type": "address"
},
{
"internalType": "contract BoringOnChainQueue",
"name": "queue",
"type": "address"
},
{
"internalType": "contract TellerWithYieldStreaming",
"name": "teller",
"type": "address"
},
{
"internalType": "contract IBufferLens",
"name": "bufferLens",
"type": "address"
}
],
"name": "previewWithdraws",
"outputs": [
{
"components": [
{
"internalType": "bool",
"name": "withdrawsNotAllowed",
"type": "bool"
},
{
"internalType": "bool",
"name": "withdrawNotMatured",
"type": "bool"
},
{
"internalType": "bool",
"name": "deadlinePassed",
"type": "bool"
},
{
"internalType": "bool",
"name": "noShares",
"type": "bool"
},
{
"internalType": "bool",
"name": "notEnoughAssetsForWithdraw",
"type": "bool"
},
{
"internalType": "uint256",
"name": "withdrawableAssets",
"type": "uint256"
}
],
"internalType": "struct ArcticArchitectureLens.PreviewWithdrawResult[]",
"name": "res",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract BoringVault",
"name": "boringVault",
"type": "address"
},
{
"internalType": "contract AccountantWithRateProviders",
"name": "accountant",
"type": "address"
}
],
"name": "totalAssets",
"outputs": [
{
"internalType": "contract ERC20",
"name": "asset",
"type": "address"
},
{
"internalType": "uint256",
"name": "assets",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "contract TellerWithMultiAssetSupport",
"name": "teller",
"type": "address"
}
],
"name": "userUnlockTime",
"outputs": [
{
"internalType": "uint256",
"name": "time",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
]0x608060405234801561000f575f80fd5b50611f3e8061001d5f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063c9d6802f11610093578063e3f2161111610063578063e3f2161114610253578063e91774b614610273578063f7888aec14610286578063f82cffe514610299575f80fd5b8063c9d6802f146101e2578063d16a478114610202578063dc3b7c8b1461022d578063e1ef37c614610240575f80fd5b8063789fd871116100ce578063789fd8711461016b5780638ad7fed31461018c5780639b85864f146101af578063aa03f2e8146101cf575f80fd5b806318300a24146100f45780634bea9ba31461012b5780636c3191791461014b575b5f80fd5b6101076101023660046114dd565b6102ac565b604080516001600160a01b0390931683526020830191909152015b60405180910390f35b61013e6101393660046114dd565b61045c565b6040516101229190611578565b61015e610159366004611586565b61053c565b6040516101229190611618565b61017e61017936600461168a565b6108ec565b604051908152602001610122565b61019f61019a3660046116d2565b610a3a565b6040519015158152602001610122565b6101c26101bd3660046116ed565b610aa1565b6040516101229190611761565b61017e6101dd3660046117ae565b610b98565b6101f56101f0366004611951565b610c84565b6040516101229190611a06565b610215610210366004611a23565b610e79565b6040516001600160801b039091168152602001610122565b61017e61023b3660046116d2565b610f06565b61017e61024e3660046114dd565b610f67565b610266610261366004611a71565b610fd2565b6040516101229190611b1e565b61019f610281366004611b5f565b6110ca565b61017e6102943660046114dd565b6112b9565b61019f6102a7366004611bb5565b61132b565b5f805f846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030f9190611bfa565b90505f846001600160a01b031663679aefce6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561034e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103729190611bfa565b90505f866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d59190611c11565b9050856001600160a01b0316635001f3b56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610413573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104379190611c31565b94506104508261044883600a611d40565b85919061149b565b93505050509250929050565b6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260405163aa5a0ffd60e01b81526001600160a01b03848116600483015283169063aa5a0ffd9060240160e060405180830381865afa1580156104d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fc9190611d5d565b60c08801526001600160601b031660a087015261ffff908116608087015216606085015262ffffff90811660408501521660208301521515815292915050565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091526001600160a01b0382166105e85760405162461bcd60e51b815260206004820152602960248201527f427566666572206c656e7320726571756972656420666f7220696e7374616e7460448201526820776974686472617760b81b606482015260840160405180910390fd5b826001600160a01b031663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa158015610624573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106489190611de7565b1561065557600160208201525b6040516320ff722560e11b81526001600160a01b0389811660048301525f91908516906341fee44a90602401606060405180830381865afa15801561069c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c09190611e00565b50915050806106d157600160408301525b875f036106e057600160608301525b6040516305c4654360e41b81526001600160a01b038b811660048301525f9190861690635c4654309060240160a060405180830381865afa158015610727573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074b9190611e39565b9450505050504281111561076157600160808401525b5f876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561079e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190611c11565b604051634104b9ed60e11b81526001600160a01b038d811660048301529192506108449189169063820973da90602401602060405180830381865afa15801561080d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108319190611bfa565b61083c83600a611d40565b8c919061149b565b80855289111561085657600160c08501525b50604051631f9b7c6360e01b81526001600160a01b0386811660048301528b81166024830152851690631f9b7c6390604401602060405180830381865afa1580156108a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c79190611bfa565b60e08401819052835111156108de57600160a08401525b505098975050505050505050565b6040516370a0823160e01b81526001600160a01b0384811660048301525f9182918516906370a0823190602401602060405180830381865afa158015610934573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109589190611bfa565b90505f836001600160a01b031663679aefce6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610997573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bb9190611bfa565b90505f856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109fa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1e9190611c11565b9050610a2f8261044883600a611d40565b979650505050505050565b5f816001600160a01b031663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9b9190611de7565b92915050565b6060828067ffffffffffffffff811115610abd57610abd6117fe565b604051908082528060200260200182016040528015610b2257816020015b6040805160e0810182525f8082526020808301829052928201819052606082018190526080820181905260a0820181905260c082015282525f19909201910181610adb5790505b5091505f5b81811015610b8f57610b5f868683818110610b4457610b44611e93565b9050602002016020810190610b5991906116d2565b8561045c565b838281518110610b7157610b71611e93565b60200260200101819052508080610b8790611ea7565b915050610b27565b50509392505050565b5f80836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfa9190611c11565b9050610c7a610c0a82600a611d40565b6040516301dcbb1160e41b81526001600160a01b038981166004830152861690631dcbb11090602401602060405180830381865afa158015610c4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c729190611bfa565b87919061149b565b9695505050505050565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101919091525f610cc487604001518661045c565b8051909150610cd257600182525b5f8760c0015162ffffff168860a0015164ffffffffff16610cf39190611ebf565b905080421015610d0557600160208401525b5f8860e0015162ffffff1682610d1b9190611ebf565b905080421115610d2d57600160408501525b88606001516001600160801b03165f03610d4957600160608501525b6001600160a01b03851615610dd8576040898101519051631f9b7c6360e01b81526001600160a01b038881166004830152918216602482015290861690631f9b7c6390604401602060405180830381865afa158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce9190611bfa565b60a0850152610e4c565b6040808a015190516370a0823160e01b81526001600160a01b038a81166004830152909116906370a0823190602401602060405180830381865afa158015610e22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e469190611bfa565b60a08501525b88608001516001600160801b03168460a001511015610e6d57600160808501525b50505095945050505050565b60405163734d18e160e11b81526001600160a01b0384811660048301526001600160801b038416602483015261ffff831660448301525f919086169063e69a31c290606401602060405180830381865afa158015610ed9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efd9190611ed2565b95945050505050565b5f816001600160a01b031663679aefce6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9b9190611bfa565b6040516305c4654360e41b81526001600160a01b0383811660048301525f9190831690635c4654309060240160a060405180830381865afa158015610fae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2f9190611e39565b6060858067ffffffffffffffff811115610fee57610fee6117fe565b60405190808252806020026020018201604052801561104c57816020015b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a082015282525f1990920191018161100c5790505b5091505f5b818110156110be5761108e89898381811061106e5761106e611e93565b905061010002018036038101906110859190611eed565b88888888610c84565b8382815181106110a0576110a0611e93565b602002602001018190525080806110b690611ea7565b915050611051565b50509695505050505050565b6040516370a0823160e01b81526001600160a01b0386811660048301525f9185918716906370a0823190602401602060405180830381865afa158015611112573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111369190611bfa565b101561114357505f610efd565b604051636eb1769f60e11b81526001600160a01b038781166004830152848116602483015285919087169063dd62ed3e90604401602060405180830381865afa158015611192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b69190611bfa565b10156111c357505f610efd565b816001600160a01b031663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112239190611de7565b1561122f57505f610efd565b6040516320ff722560e11b81526001600160a01b0386811660048301525f91908416906341fee44a90602401606060405180830381865afa158015611276573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061129a9190611e00565b50509050806112ac575f915050610efd565b5060019695505050505050565b6040516370a0823160e01b81526001600160a01b0383811660048301525f91908316906370a0823190602401602060405180830381865afa158015611300573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113249190611bfa565b9392505050565b6040516370a0823160e01b81526001600160a01b0385811660048301525f9184918616906370a0823190602401602060405180830381865afa158015611373573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113979190611bfa565b10156113a457505f611493565b816001600160a01b031663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114049190611de7565b1561141057505f611493565b6040516320ff722560e11b81526001600160a01b0385811660048301525f91908416906341fee44a90602401606060405180830381865afa158015611457573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147b9190611e00565b505090508061148d575f915050611493565b60019150505b949350505050565b5f825f1904841183021582026114af575f80fd5b5091020490565b6001600160a01b03811681146114ca575f80fd5b50565b80356114d8816114b6565b919050565b5f80604083850312156114ee575f80fd5b82356114f9816114b6565b91506020830135611509816114b6565b809150509250929050565b805115158252602081015162ffffff80821660208501528060408401511660408501525050606081015161ffff808216606085015280608084015116608085015250506001600160601b0360a08201511660a083015260c081015160c08301525050565b60e08101610a9b8284611514565b5f805f805f805f80610100898b03121561159e575f80fd5b88356115a9816114b6565b975060208901356115b9816114b6565b9650604089013595506060890135945060808901356115d7816114b6565b935060a08901356115e7816114b6565b925060c08901356115f7816114b6565b915060e0890135611607816114b6565b809150509295985092959890939650565b5f610100820190508251825260208301511515602083015260408301511515604083015260608301511515606083015260808301511515608083015260a083015161166760a084018215159052565b5060c083015161167b60c084018215159052565b5060e092830151919092015290565b5f805f6060848603121561169c575f80fd5b83356116a7816114b6565b925060208401356116b7816114b6565b915060408401356116c7816114b6565b809150509250925092565b5f602082840312156116e2575f80fd5b8135611324816114b6565b5f805f604084860312156116ff575f80fd5b833567ffffffffffffffff80821115611716575f80fd5b818601915086601f830112611729575f80fd5b813581811115611737575f80fd5b8760208260051b850101111561174b575f80fd5b602092830195509350508401356116c7816114b6565b602080825282518282018190525f9190848201906040850190845b818110156117a25761178f838551611514565b9284019260e0929092019160010161177c565b50909695505050505050565b5f805f80608085870312156117c1575f80fd5b84356117cc816114b6565b93506020850135925060408501356117e3816114b6565b915060608501356117f3816114b6565b939692955090935050565b634e487b7160e01b5f52604160045260245ffd5b6001600160601b03811681146114ca575f80fd5b80356114d881611812565b6001600160801b03811681146114ca575f80fd5b80356114d881611831565b803564ffffffffff811681146114d8575f80fd5b62ffffff811681146114ca575f80fd5b80356114d881611864565b5f610100808385031215611891575f80fd5b6040519081019067ffffffffffffffff821181831017156118c057634e487b7160e01b5f52604160045260245ffd5b816040528092506118d084611826565b81526118de602085016114cd565b60208201526118ef604085016114cd565b604082015261190060608501611845565b606082015261191160808501611845565b608082015261192260a08501611850565b60a082015261193360c08501611874565b60c082015261194460e08501611874565b60e0820152505092915050565b5f805f805f6101808688031215611966575f80fd5b611970878761187f565b9450610100860135611981816114b6565b9350610120860135611992816114b6565b92506101408601356119a3816114b6565b91506101608601356119b4816114b6565b809150509295509295909350565b80511515825260208101511515602083015260408101511515604083015260608101511515606083015260808101511515608083015260a081015160a08301525050565b60c08101610a9b82846119c2565b61ffff811681146114ca575f80fd5b5f805f8060808587031215611a36575f80fd5b8435611a41816114b6565b93506020850135611a51816114b6565b92506040850135611a6181611831565b915060608501356117f381611a14565b5f805f805f8060a08789031215611a86575f80fd5b863567ffffffffffffffff80821115611a9d575f80fd5b818901915089601f830112611ab0575f80fd5b813581811115611abe575f80fd5b8a60208260081b8501011115611ad2575f80fd5b602092830198509650611ae891890190506114cd565b9350611af6604088016114cd565b9250611b04606088016114cd565b9150611b12608088016114cd565b90509295509295509295565b602080825282518282018190525f9190848201906040850190845b818110156117a257611b4c8385516119c2565b9284019260c09290920191600101611b39565b5f805f805f60a08688031215611b73575f80fd5b8535611b7e816114b6565b94506020860135611b8e816114b6565b9350604086013592506060860135611ba5816114b6565b915060808601356119b4816114b6565b5f805f8060808587031215611bc8575f80fd5b8435611bd3816114b6565b93506020850135611be3816114b6565b92506040850135915060608501356117f3816114b6565b5f60208284031215611c0a575f80fd5b5051919050565b5f60208284031215611c21575f80fd5b815160ff81168114611324575f80fd5b5f60208284031215611c41575f80fd5b8151611324816114b6565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115611c9a57815f1904821115611c8057611c80611c4c565b80851615611c8d57918102915b93841c9390800290611c65565b509250929050565b5f82611cb057506001610a9b565b81611cbc57505f610a9b565b8160018114611cd25760028114611cdc57611cf8565b6001915050610a9b565b60ff841115611ced57611ced611c4c565b50506001821b610a9b565b5060208310610133831016604e8410600b8410161715611d1b575081810a610a9b565b611d258383611c60565b805f1904821115611d3857611d38611c4c565b029392505050565b5f61132460ff841683611ca2565b805180151581146114d8575f80fd5b5f805f805f805f60e0888a031215611d73575f80fd5b611d7c88611d4e565b96506020880151611d8c81611864565b6040890151909650611d9d81611864565b6060890151909550611dae81611a14565b6080890151909450611dbf81611a14565b60a0890151909350611dd081611812565b8092505060c0880151905092959891949750929550565b5f60208284031215611df7575f80fd5b61132482611d4e565b5f805f60608486031215611e12575f80fd5b611e1b84611d4e565b9250611e2960208501611d4e565b915060408401516116c781611a14565b5f805f805f60a08688031215611e4d575f80fd5b611e5686611d4e565b9450611e6460208701611d4e565b9350611e7260408701611d4e565b9250611e8060608701611d4e565b9150608086015190509295509295909350565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611eb857611eb8611c4c565b5060010190565b80820180821115610a9b57610a9b611c4c565b5f60208284031215611ee2575f80fd5b815161132481611831565b5f6101008284031215611efe575f80fd5b611324838361187f56fea2646970667358221220e9c3a6051a6e57ac2aae6e3338c9650672f840afdae0920543f0a4d2dc25d9c664736f6c63430008150033
0x608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063c9d6802f11610093578063e3f2161111610063578063e3f2161114610253578063e91774b614610273578063f7888aec14610286578063f82cffe514610299575f80fd5b8063c9d6802f146101e2578063d16a478114610202578063dc3b7c8b1461022d578063e1ef37c614610240575f80fd5b8063789fd871116100ce578063789fd8711461016b5780638ad7fed31461018c5780639b85864f146101af578063aa03f2e8146101cf575f80fd5b806318300a24146100f45780634bea9ba31461012b5780636c3191791461014b575b5f80fd5b6101076101023660046114dd565b6102ac565b604080516001600160a01b0390931683526020830191909152015b60405180910390f35b61013e6101393660046114dd565b61045c565b6040516101229190611578565b61015e610159366004611586565b61053c565b6040516101229190611618565b61017e61017936600461168a565b6108ec565b604051908152602001610122565b61019f61019a3660046116d2565b610a3a565b6040519015158152602001610122565b6101c26101bd3660046116ed565b610aa1565b6040516101229190611761565b61017e6101dd3660046117ae565b610b98565b6101f56101f0366004611951565b610c84565b6040516101229190611a06565b610215610210366004611a23565b610e79565b6040516001600160801b039091168152602001610122565b61017e61023b3660046116d2565b610f06565b61017e61024e3660046114dd565b610f67565b610266610261366004611a71565b610fd2565b6040516101229190611b1e565b61019f610281366004611b5f565b6110ca565b61017e6102943660046114dd565b6112b9565b61019f6102a7366004611bb5565b61132b565b5f805f846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030f9190611bfa565b90505f846001600160a01b031663679aefce6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561034e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103729190611bfa565b90505f866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d59190611c11565b9050856001600160a01b0316635001f3b56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610413573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104379190611c31565b94506104508261044883600a611d40565b85919061149b565b93505050509250929050565b6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260405163aa5a0ffd60e01b81526001600160a01b03848116600483015283169063aa5a0ffd9060240160e060405180830381865afa1580156104d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fc9190611d5d565b60c08801526001600160601b031660a087015261ffff908116608087015216606085015262ffffff90811660408501521660208301521515815292915050565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091526001600160a01b0382166105e85760405162461bcd60e51b815260206004820152602960248201527f427566666572206c656e7320726571756972656420666f7220696e7374616e7460448201526820776974686472617760b81b606482015260840160405180910390fd5b826001600160a01b031663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa158015610624573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106489190611de7565b1561065557600160208201525b6040516320ff722560e11b81526001600160a01b0389811660048301525f91908516906341fee44a90602401606060405180830381865afa15801561069c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c09190611e00565b50915050806106d157600160408301525b875f036106e057600160608301525b6040516305c4654360e41b81526001600160a01b038b811660048301525f9190861690635c4654309060240160a060405180830381865afa158015610727573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074b9190611e39565b9450505050504281111561076157600160808401525b5f876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561079e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190611c11565b604051634104b9ed60e11b81526001600160a01b038d811660048301529192506108449189169063820973da90602401602060405180830381865afa15801561080d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108319190611bfa565b61083c83600a611d40565b8c919061149b565b80855289111561085657600160c08501525b50604051631f9b7c6360e01b81526001600160a01b0386811660048301528b81166024830152851690631f9b7c6390604401602060405180830381865afa1580156108a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c79190611bfa565b60e08401819052835111156108de57600160a08401525b505098975050505050505050565b6040516370a0823160e01b81526001600160a01b0384811660048301525f9182918516906370a0823190602401602060405180830381865afa158015610934573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109589190611bfa565b90505f836001600160a01b031663679aefce6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610997573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bb9190611bfa565b90505f856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109fa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1e9190611c11565b9050610a2f8261044883600a611d40565b979650505050505050565b5f816001600160a01b031663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9b9190611de7565b92915050565b6060828067ffffffffffffffff811115610abd57610abd6117fe565b604051908082528060200260200182016040528015610b2257816020015b6040805160e0810182525f8082526020808301829052928201819052606082018190526080820181905260a0820181905260c082015282525f19909201910181610adb5790505b5091505f5b81811015610b8f57610b5f868683818110610b4457610b44611e93565b9050602002016020810190610b5991906116d2565b8561045c565b838281518110610b7157610b71611e93565b60200260200101819052508080610b8790611ea7565b915050610b27565b50509392505050565b5f80836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfa9190611c11565b9050610c7a610c0a82600a611d40565b6040516301dcbb1160e41b81526001600160a01b038981166004830152861690631dcbb11090602401602060405180830381865afa158015610c4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c729190611bfa565b87919061149b565b9695505050505050565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101919091525f610cc487604001518661045c565b8051909150610cd257600182525b5f8760c0015162ffffff168860a0015164ffffffffff16610cf39190611ebf565b905080421015610d0557600160208401525b5f8860e0015162ffffff1682610d1b9190611ebf565b905080421115610d2d57600160408501525b88606001516001600160801b03165f03610d4957600160608501525b6001600160a01b03851615610dd8576040898101519051631f9b7c6360e01b81526001600160a01b038881166004830152918216602482015290861690631f9b7c6390604401602060405180830381865afa158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce9190611bfa565b60a0850152610e4c565b6040808a015190516370a0823160e01b81526001600160a01b038a81166004830152909116906370a0823190602401602060405180830381865afa158015610e22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e469190611bfa565b60a08501525b88608001516001600160801b03168460a001511015610e6d57600160808501525b50505095945050505050565b60405163734d18e160e11b81526001600160a01b0384811660048301526001600160801b038416602483015261ffff831660448301525f919086169063e69a31c290606401602060405180830381865afa158015610ed9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efd9190611ed2565b95945050505050565b5f816001600160a01b031663679aefce6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9b9190611bfa565b6040516305c4654360e41b81526001600160a01b0383811660048301525f9190831690635c4654309060240160a060405180830381865afa158015610fae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2f9190611e39565b6060858067ffffffffffffffff811115610fee57610fee6117fe565b60405190808252806020026020018201604052801561104c57816020015b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a082015282525f1990920191018161100c5790505b5091505f5b818110156110be5761108e89898381811061106e5761106e611e93565b905061010002018036038101906110859190611eed565b88888888610c84565b8382815181106110a0576110a0611e93565b602002602001018190525080806110b690611ea7565b915050611051565b50509695505050505050565b6040516370a0823160e01b81526001600160a01b0386811660048301525f9185918716906370a0823190602401602060405180830381865afa158015611112573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111369190611bfa565b101561114357505f610efd565b604051636eb1769f60e11b81526001600160a01b038781166004830152848116602483015285919087169063dd62ed3e90604401602060405180830381865afa158015611192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b69190611bfa565b10156111c357505f610efd565b816001600160a01b031663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112239190611de7565b1561122f57505f610efd565b6040516320ff722560e11b81526001600160a01b0386811660048301525f91908416906341fee44a90602401606060405180830381865afa158015611276573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061129a9190611e00565b50509050806112ac575f915050610efd565b5060019695505050505050565b6040516370a0823160e01b81526001600160a01b0383811660048301525f91908316906370a0823190602401602060405180830381865afa158015611300573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113249190611bfa565b9392505050565b6040516370a0823160e01b81526001600160a01b0385811660048301525f9184918616906370a0823190602401602060405180830381865afa158015611373573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113979190611bfa565b10156113a457505f611493565b816001600160a01b031663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114049190611de7565b1561141057505f611493565b6040516320ff722560e11b81526001600160a01b0385811660048301525f91908416906341fee44a90602401606060405180830381865afa158015611457573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147b9190611e00565b505090508061148d575f915050611493565b60019150505b949350505050565b5f825f1904841183021582026114af575f80fd5b5091020490565b6001600160a01b03811681146114ca575f80fd5b50565b80356114d8816114b6565b919050565b5f80604083850312156114ee575f80fd5b82356114f9816114b6565b91506020830135611509816114b6565b809150509250929050565b805115158252602081015162ffffff80821660208501528060408401511660408501525050606081015161ffff808216606085015280608084015116608085015250506001600160601b0360a08201511660a083015260c081015160c08301525050565b60e08101610a9b8284611514565b5f805f805f805f80610100898b03121561159e575f80fd5b88356115a9816114b6565b975060208901356115b9816114b6565b9650604089013595506060890135945060808901356115d7816114b6565b935060a08901356115e7816114b6565b925060c08901356115f7816114b6565b915060e0890135611607816114b6565b809150509295985092959890939650565b5f610100820190508251825260208301511515602083015260408301511515604083015260608301511515606083015260808301511515608083015260a083015161166760a084018215159052565b5060c083015161167b60c084018215159052565b5060e092830151919092015290565b5f805f6060848603121561169c575f80fd5b83356116a7816114b6565b925060208401356116b7816114b6565b915060408401356116c7816114b6565b809150509250925092565b5f602082840312156116e2575f80fd5b8135611324816114b6565b5f805f604084860312156116ff575f80fd5b833567ffffffffffffffff80821115611716575f80fd5b818601915086601f830112611729575f80fd5b813581811115611737575f80fd5b8760208260051b850101111561174b575f80fd5b602092830195509350508401356116c7816114b6565b602080825282518282018190525f9190848201906040850190845b818110156117a25761178f838551611514565b9284019260e0929092019160010161177c565b50909695505050505050565b5f805f80608085870312156117c1575f80fd5b84356117cc816114b6565b93506020850135925060408501356117e3816114b6565b915060608501356117f3816114b6565b939692955090935050565b634e487b7160e01b5f52604160045260245ffd5b6001600160601b03811681146114ca575f80fd5b80356114d881611812565b6001600160801b03811681146114ca575f80fd5b80356114d881611831565b803564ffffffffff811681146114d8575f80fd5b62ffffff811681146114ca575f80fd5b80356114d881611864565b5f610100808385031215611891575f80fd5b6040519081019067ffffffffffffffff821181831017156118c057634e487b7160e01b5f52604160045260245ffd5b816040528092506118d084611826565b81526118de602085016114cd565b60208201526118ef604085016114cd565b604082015261190060608501611845565b606082015261191160808501611845565b608082015261192260a08501611850565b60a082015261193360c08501611874565b60c082015261194460e08501611874565b60e0820152505092915050565b5f805f805f6101808688031215611966575f80fd5b611970878761187f565b9450610100860135611981816114b6565b9350610120860135611992816114b6565b92506101408601356119a3816114b6565b91506101608601356119b4816114b6565b809150509295509295909350565b80511515825260208101511515602083015260408101511515604083015260608101511515606083015260808101511515608083015260a081015160a08301525050565b60c08101610a9b82846119c2565b61ffff811681146114ca575f80fd5b5f805f8060808587031215611a36575f80fd5b8435611a41816114b6565b93506020850135611a51816114b6565b92506040850135611a6181611831565b915060608501356117f381611a14565b5f805f805f8060a08789031215611a86575f80fd5b863567ffffffffffffffff80821115611a9d575f80fd5b818901915089601f830112611ab0575f80fd5b813581811115611abe575f80fd5b8a60208260081b8501011115611ad2575f80fd5b602092830198509650611ae891890190506114cd565b9350611af6604088016114cd565b9250611b04606088016114cd565b9150611b12608088016114cd565b90509295509295509295565b602080825282518282018190525f9190848201906040850190845b818110156117a257611b4c8385516119c2565b9284019260c09290920191600101611b39565b5f805f805f60a08688031215611b73575f80fd5b8535611b7e816114b6565b94506020860135611b8e816114b6565b9350604086013592506060860135611ba5816114b6565b915060808601356119b4816114b6565b5f805f8060808587031215611bc8575f80fd5b8435611bd3816114b6565b93506020850135611be3816114b6565b92506040850135915060608501356117f3816114b6565b5f60208284031215611c0a575f80fd5b5051919050565b5f60208284031215611c21575f80fd5b815160ff81168114611324575f80fd5b5f60208284031215611c41575f80fd5b8151611324816114b6565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115611c9a57815f1904821115611c8057611c80611c4c565b80851615611c8d57918102915b93841c9390800290611c65565b509250929050565b5f82611cb057506001610a9b565b81611cbc57505f610a9b565b8160018114611cd25760028114611cdc57611cf8565b6001915050610a9b565b60ff841115611ced57611ced611c4c565b50506001821b610a9b565b5060208310610133831016604e8410600b8410161715611d1b575081810a610a9b565b611d258383611c60565b805f1904821115611d3857611d38611c4c565b029392505050565b5f61132460ff841683611ca2565b805180151581146114d8575f80fd5b5f805f805f805f60e0888a031215611d73575f80fd5b611d7c88611d4e565b96506020880151611d8c81611864565b6040890151909650611d9d81611864565b6060890151909550611dae81611a14565b6080890151909450611dbf81611a14565b60a0890151909350611dd081611812565b8092505060c0880151905092959891949750929550565b5f60208284031215611df7575f80fd5b61132482611d4e565b5f805f60608486031215611e12575f80fd5b611e1b84611d4e565b9250611e2960208501611d4e565b915060408401516116c781611a14565b5f805f805f60a08688031215611e4d575f80fd5b611e5686611d4e565b9450611e6460208701611d4e565b9350611e7260408701611d4e565b9250611e8060608701611d4e565b9150608086015190509295509295909350565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611eb857611eb8611c4c565b5060010190565b80820180821115610a9b57610a9b611c4c565b5f60208284031215611ee2575f80fd5b815161132481611831565b5f6101008284031215611efe575f80fd5b611324838361187f56fea2646970667358221220e9c3a6051a6e57ac2aae6e3338c9650672f840afdae0920543f0a4d2dc25d9c664736f6c63430008150033