[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyTermContractPaired", "type": "error" }, { "inputs": [], "name": "MintExposureCapExceeded", "type": "error" }, { "inputs": [], "name": "TermRepoTokenBurningPaused", "type": "error" }, { "inputs": [], "name": "TermRepoTokenMintingPaused", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "beacon", "type": "address" } ], "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "BURNER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEVOPS_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burnAndReturnValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "burningPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "config", "outputs": [ { "internalType": "uint256", "name": "redemptionTimestamp", "type": "uint256" }, { "internalType": "address", "name": "purchaseToken", "type": "address" }, { "internalType": "address", "name": "termRepoServicer", "type": "address" }, { "internalType": "address", "name": "termRepoCollateralManager", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "supplyMinted", "type": "uint256" } ], "name": "decrementMintExposureCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCollateralRequirements", "outputs": [ { "internalType": "address[]", "name": "collateralTokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "maintenanceRatios", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "termRepoId_", "type": "string" }, { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "uint8", "name": "decimalPlaces_", "type": "uint8" }, { "internalType": "uint256", "name": "redemptionValue_", "type": "uint256" }, { "internalType": "uint256", "name": "mintExposureCap_", "type": "uint256" }, { "internalType": "address", "name": "termInitializer_", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "redemptionTimestamp", "type": "uint256" }, { "internalType": "address", "name": "purchaseToken", "type": "address" }, { "internalType": "address", "name": "termRepoServicer", "type": "address" }, { "internalType": "address", "name": "termRepoCollateralManager", "type": "address" } ], "internalType": "struct TermRepoTokenConfig", "name": "config_", "type": "tuple" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "mintExposureCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "redemptionAmount", "type": "uint256" } ], "name": "mintRedemptionValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "name": "mintTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "mintingPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "termRepoServicer_", "type": "address" }, { "internalType": "contract ITermEventEmitter", "name": "emitter_", "type": "address" }, { "internalType": "address", "name": "devopsMultisig_", "type": "address" }, { "internalType": "address", "name": "adminWallet_", "type": "address" } ], "name": "pairTermContracts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pauseBurning", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pauseMinting", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "redemptionValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "mintExposureCap_", "type": "uint256" } ], "name": "resetMintExposureCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "termRepoId", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalRedemptionValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpauseBurning", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpauseMinting", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" } ], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516138ae6200011f60003960008181610b7d01528181610bbd01528181610cc401528181610d040152610d7c01526138ae6000f3fe6080604052600436106102745760003560e01c806379502c5511610150578063ae200322116100bc578063ae20032214610788578063b979dee31461079d578063cc5b6e4a146107bd578063d505accf146107d4578063d5391393146107f4578063d547741f14610816578063da8fbf2a14610836578063dd62ed3e1461084b578063e1a283d61461086b578063ef4474cd1461088c578063f0dda65c146108a3578063f59bb446146108c3578063f9e4f0ed146108e357600080fd5b806379502c55146105ad5780637ecebe0014610611578063833c1d951461063157806384b0196e146106535780638bef7f5b1461067b57806391d148541461069b57806395d89b41146106bb5780639dc29fac146106d0578063a217fddf146106f0578063a457c2d714610705578063a8f421c214610725578063a9059cbb14610745578063ac7c54291461076557600080fd5b8063313ce567116101ef578063313ce5671461041d5780633644e5151461044057806336568abe146104555780633659cfe61461047557806338b616c11461049557806339509351146104aa5780634f1ef286146104ca57806352d1902d146104dd57806354fd4d50146104f25780636d5ba7051461052057806370a0823114610540578063723f4e2a1461057657806375b238fc1461058b57600080fd5b806301ffc9a714610279578063056824de146102ae578063059cbd9b146102d057806306fdde03146102e5578063095ea7b31461030757806318160ddd14610327578063201a66251461034657806323b872dd14610368578063248a9ca31461038857806327df3d3e146103b9578063282c51f3146103db5780632f2ff15d146103fd575b600080fd5b34801561028557600080fd5b50610299610294366004612d71565b6108fa565b60405190151581526020015b60405180910390f35b3480156102ba57600080fd5b506102ce6102c9366004612d9b565b610931565b005b3480156102dc57600080fd5b506102ce610950565b3480156102f157600080fd5b506102fa6109e8565b6040516102a59190612e04565b34801561031357600080fd5b50610299610322366004612e3c565b610a7a565b34801561033357600080fd5b506035545b6040519081526020016102a5565b34801561035257600080fd5b5061033860008051602061379283398151915281565b34801561037457600080fd5b50610299610383366004612e68565b610a92565b34801561039457600080fd5b506103386103a3366004612d9b565b6000908152610162602052604090206001015490565b3480156103c557600080fd5b506103386000805160206137b283398151915281565b3480156103e757600080fd5b5061033860008051602061377283398151915281565b34801561040957600080fd5b506102ce610418366004612ea9565b610ab6565b34801561042957600080fd5b506101945460405160ff90911681526020016102a5565b34801561044c57600080fd5b50610338610ae1565b34801561046157600080fd5b506102ce610470366004612ea9565b610af0565b34801561048157600080fd5b506102ce610490366004612ed9565b610b73565b3480156104a157600080fd5b506102ce610c3b565b3480156104b657600080fd5b506102996104c5366004612e3c565b610c98565b6102ce6104d8366004612f0c565b610cba565b3480156104e957600080fd5b50610338610d6f565b3480156104fe57600080fd5b506040805180820190915260058152640302e392e360dc1b60208201526102fa565b34801561052c57600080fd5b506102ce61053b366004613043565b610e1d565b34801561054c57600080fd5b5061033861055b366004612ed9565b6001600160a01b031660009081526033602052604090205490565b34801561058257600080fd5b50610338611126565b34801561059757600080fd5b5061033860008051602061385983398151915281565b3480156105b957600080fd5b50610198546101995461019a5461019b546105e293926001600160a01b03908116928116911684565b604080519485526001600160a01b039384166020860152918316918401919091521660608201526080016102a5565b34801561061d57600080fd5b5061033861062c366004612ed9565b611173565b34801561063d57600080fd5b5061019454610299906301000000900460ff1681565b34801561065f57600080fd5b50610668611191565b6040516102a5979695949392919061315e565b34801561068757600080fd5b50610338610696366004612e3c565b61122f565b3480156106a757600080fd5b506102996106b6366004612ea9565b6112c8565b3480156106c757600080fd5b506102fa6112f4565b3480156106dc57600080fd5b506102ce6106eb366004612e3c565b611303565b3480156106fc57600080fd5b50610338600081565b34801561071157600080fd5b50610299610720366004612e3c565b61136e565b34801561073157600080fd5b506102ce6107403660046131ce565b6113e9565b34801561075157600080fd5b50610299610760366004612e3c565b611533565b34801561077157600080fd5b5061077a611541565b6040516102a592919061322a565b34801561079457600080fd5b506102ce6117b6565b3480156107a957600080fd5b506102ce6107b8366004612d9b565b611812565b3480156107c957600080fd5b506103386101965481565b3480156107e057600080fd5b506102ce6107ef366004613280565b61186a565b34801561080057600080fd5b5061033860008051602061381983398151915281565b34801561082257600080fd5b506102ce610831366004612ea9565b6119ce565b34801561084257600080fd5b506102ce6119f4565b34801561085757600080fd5b506103386108663660046132f1565b611a55565b34801561087757600080fd5b50610194546102999062010000900460ff1681565b34801561089857600080fd5b506103386101955481565b3480156108af57600080fd5b506103386108be366004612e3c565b611a80565b3480156108cf57600080fd5b506103386108de366004612e3c565b611b00565b3480156108ef57600080fd5b506103386101975481565b60006001600160e01b03198216637965db0b60e01b148061092b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061385983398151915261094981611b91565b5061019755565b60008051602061385983398151915261096881611b91565b610194805463ff0000001916630100000017905561019c5461019654604051630954cf0360e01b81526001600160a01b0390921691630954cf03916109b39160040190815260200190565b600060405180830381600087803b1580156109cd57600080fd5b505af11580156109e1573d6000803e3d6000fd5b5050505050565b6060603680546109f79061331f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a239061331f565b8015610a705780601f10610a4557610100808354040283529160200191610a70565b820191906000526020600020905b815481529060010190602001808311610a5357829003601f168201915b5050505050905090565b600033610a88818585611b9b565b5060019392505050565b600033610aa0858285611cbf565b610aab858585611d39565b506001949350505050565b60008281526101626020526040902060010154610ad281611b91565b610adc8383611ed2565b505050565b6000610aeb611f59565b905090565b6001600160a01b0381163314610b655760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610b6f8282611f63565b5050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610bbb5760405162461bcd60e51b8152600401610b5c90613353565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bed611fcb565b6001600160a01b031614610c135760405162461bcd60e51b8152600401610b5c9061339f565b610c1c81611fe7565b60408051600080825260208201909252610c3891839190612069565b50565b600080516020613859833981519152610c5381611b91565b610194805463ff0000001916905561019c546101965460405163b29aaf7560e01b81526001600160a01b039092169163b29aaf75916109b39160040190815260200190565b600033610a88818585610cab8383611a55565b610cb59190613401565b611b9b565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610d025760405162461bcd60e51b8152600401610b5c90613353565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610d34611fcb565b6001600160a01b031614610d5a5760405162461bcd60e51b8152600401610b5c9061339f565b610d6382611fe7565b610b6f82826001612069565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e0a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610b5c565b506000805160206137d283398151915290565b600054610100900460ff1615808015610e3d5750600054600160ff909116105b80610e5e5750610e4c306121d4565b158015610e5e575060005460ff166001145b610ec15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b5c565b6000805460ff191660011790558015610ee4576000805461ff0019166101001790555b610f578a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506121e392505050565b610f968a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061221492505050565b610f9e61225e565b610fa661225e565b610fbe6000805160206137b283398151915284611ed2565b610194805460ff191660ff88161790556101958590556000610fe66040840160208501612ed9565b6001600160a01b0316141580156110165750600061100a6080840160608501612ed9565b6001600160a01b031614155b801561103b5750600061102f6060840160408501612ed9565b6001600160a01b031614155b6110805760405162461bcd60e51b81526020600482015260166024820152757a65726f206164647265737320696e20636f6e66696760501b6044820152606401610b5c565b8161019861108e8282613434565b50506040516110a3908d908d9060200161348b565b60408051601f19818403018152919052805160209091012061019655610197849055610194805462ffff00191690558015611118576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60008061092b61116e6040518060200160405280670de0b6b3a764000061114c60355490565b611156919061349b565b90526040805160208101909152610195548152612287565b6122cf565b6001600160a01b03811660009081526099602052604081205461092b565b6000606080600080600060606065546000801b1480156111b15750606654155b6111f55760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610b5c565b6111fd6122e7565b6112056122f6565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6101945460009062010000900460ff161561125d57604051636864195160e01b815260040160405180910390fd5b60008051602061381983398151915261127581611b91565b60006112b461116e6040518060200160405280670de0b6b3a76400008861129c919061349b565b90526040805160208101909152610195548152612305565b90506112c0858261233f565b949350505050565b6000918252610162602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060603780546109f79061331f565b60008051602061377283398151915261131b81611b91565b610194546301000000900460ff16156113475760405163c76a6dcb60e01b815260040160405180910390fd5b61135183836123ee565b8161019760008282546113649190613401565b9091555050505050565b6000338161137c8286611a55565b9050838110156113dc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b5c565b610aab8286868403611b9b565b6000805160206137b283398151915261140181611b91565b61019454610100900460ff161561142b57604051634ce377bb60e11b815260040160405180910390fd5b610194805461ff00191661010017905561019c80546001600160a01b0386166001600160a01b031990911617905561147160008051602061385983398151915283611ed2565b61148960008051602061381983398151915286611ed2565b6114a160008051602061377283398151915286611ed2565b6114b960008051602061379283398151915284611ed2565b61019c5461019654610195546040516327481ec760e21b8152600481019290925230602483015260448201526001600160a01b0390911690639d207b1c90606401600060405180830381600087803b15801561151457600080fd5b505af1158015611528573d6000803e3d6000fd5b505050505050505050565b600033610a88818585611d39565b61019b5460408051630c87400960e11b8152905160609283926001600160a01b0390911691600091839163190e8012916004808201926020929091908290030181865afa158015611596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ba91906134b2565b60ff169050806001600160401b038111156115d7576115d7612ef6565b604051908082528060200260200182016040528015611600578160200160208202803683370190505b509350806001600160401b0381111561161b5761161b612ef6565b604051908082528060200260200182016040528015611644578160200160208202803683370190505b50925060005b818110156117af5760405163172c48c760e01b8152600481018290526001600160a01b0384169063172c48c790602401602060405180830381865afa158015611697573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bb91906134cf565b8582815181106116cd576116cd6134ec565b60200260200101906001600160a01b031690816001600160a01b031681525050826001600160a01b03166320db25d586838151811061170e5761170e6134ec565b60200260200101516040518263ffffffff1660e01b815260040161174191906001600160a01b0391909116815260200190565b602060405180830381865afa15801561175e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117829190613502565b848281518110611794576117946134ec565b60209081029190910101526117a88161351b565b905061164a565b5050509091565b6000805160206138598339815191526117ce81611b91565b610194805462ff00001916905561019c5461019654604051631d04a79b60e11b81526001600160a01b0390921691633a094f36916109b39160040190815260200190565b60008051602061381983398151915261182a81611b91565b6101975482111561184e57604051632e8a972b60e11b815260040160405180910390fd5b8161019760008282546118619190613534565b90915550505050565b834211156118ba5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610b5c565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886118e98c612510565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061194482612538565b9050600061195482878787612565565b9050896001600160a01b0316816001600160a01b0316146119b75760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610b5c565b6119c28a8a8a611b9b565b50505050505050505050565b600082815261016260205260409020600101546119ea81611b91565b610adc8383611f63565b600080516020613859833981519152611a0c81611b91565b610194805462ff000019166201000017905561019c5461019654604051630e06d05360e21b81526001600160a01b039092169163381b414c916109b39160040190815260200190565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6101945460009062010000900460ff1615611aae57604051636864195160e01b815260040160405180910390fd5b600080516020613819833981519152611ac681611b91565b611ad0848461233f565b6000611af761116e6040518060200160405280670de0b6b3a764000088611156919061349b565b95945050505050565b6000600080516020613772833981519152611b1a81611b91565b610194546301000000900460ff1615611b465760405163c76a6dcb60e01b815260040160405180910390fd5b611b5084846123ee565b826101976000828254611b639190613401565b925050819055506000611af761116e6040518060200160405280670de0b6b3a764000088611156919061349b565b610c38813361258d565b6001600160a01b038316611bfd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b5c565b6001600160a01b038216611c5e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b5c565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611ccb8484611a55565b90506000198114611d335781811015611d265760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b5c565b611d338484848403611b9b565b50505050565b6001600160a01b038316611d9d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b5c565b6001600160a01b038216611dff5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b5c565b6001600160a01b03831660009081526033602052604090205481811015611e775760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b5c565b6001600160a01b03808516600081815260336020526040808220868603905592861680825290839020805486019055915160008051602061383983398151915290611ec59086815260200190565b60405180910390a3611d33565b611edc82826112c8565b610b6f576000828152610162602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611f153390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610aeb6125e6565b611f6d82826112c8565b15610b6f576000828152610162602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000805160206137d2833981519152546001600160a01b031690565b600080516020613792833981519152611fff81611b91565b61019c5460405163b3c2d50b60e01b81523060048201526001600160a01b0384811660248301529091169063b3c2d50b90604401600060405180830381600087803b15801561204d57600080fd5b505af1158015612061573d6000803e3d6000fd5b505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561209c57610adc8361265a565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156120f6575060408051601f3d908101601f191682019092526120f391810190613502565b60015b6121595760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610b5c565b6000805160206137d283398151915281146121c85760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610b5c565b50610adc8383836126f4565b6001600160a01b03163b151590565b600054610100900460ff1661220a5760405162461bcd60e51b8152600401610b5c90613547565b610b6f8282612719565b600054610100900460ff1661223b5760405162461bcd60e51b8152600401610b5c90613547565b610c3881604051806040016040528060018152602001603160f81b815250612759565b600054610100900460ff166122855760405162461bcd60e51b8152600401610b5c90613547565b565b6040805160208101909152600081526040518060200160405280670de0b6b3a76400006122bc866000015186600001516127a8565b6122c69190613592565b90529392505050565b805160009061092b90670de0b6b3a764000090613592565b6060606780546109f79061331f565b6060606880546109f79061331f565b60408051602081019091526000815260405180602001604052806122c66123388660000151670de0b6b3a76400006127a8565b85516127bb565b6001600160a01b0382166123955760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610b5c565b80603560008282546123a79190613401565b90915550506001600160a01b038216600081815260336020908152604080832080548601905551848152600080516020613839833981519152910160405180910390a35050565b6001600160a01b03821661244e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610b5c565b6001600160a01b038216600090815260336020526040902054818110156124c25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610b5c565b6001600160a01b0383166000818152603360209081526040808320868603905560358054879003905551858152919291600080516020613839833981519152910160405180910390a3505050565b6001600160a01b03811660009081526099602052604090208054600181018255905b50919050565b600061092b612545611f59565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000612576878787876127c7565b9150915061258381612881565b5095945050505050565b61259782826112c8565b610b6f576125a4816129c6565b6125af8360206129d8565b6040516020016125c09291906135b4565b60408051601f198184030181529082905262461bcd60e51b8252610b5c91600401612e04565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612611612b73565b612619612bcc565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b612663816121d4565b6126c55760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610b5c565b6000805160206137d283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6126fd83612bfd565b60008251118061270a5750805b15610adc57611d338383612c3d565b600054610100900460ff166127405760405162461bcd60e51b8152600401610b5c90613547565b603661274c8382613669565b506037610adc8282613669565b600054610100900460ff166127805760405162461bcd60e51b8152600401610b5c90613547565b606761278c8382613669565b5060686127998282613669565b50506000606581905560665550565b60006127b4828461349b565b9392505050565b60006127b48284613592565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038311156127f45750600090506003612878565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612848573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661287157600060019250925050612878565b9150600090505b94509492505050565b600081600481111561289557612895613728565b0361289d5750565b60018160048111156128b1576128b1613728565b036128f95760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610b5c565b600281600481111561290d5761290d613728565b0361295a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b5c565b600381600481111561296e5761296e613728565b03610c385760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b5c565b606061092b6001600160a01b03831660145b606060006129e783600261349b565b6129f2906002613401565b6001600160401b03811115612a0957612a09612ef6565b6040519080825280601f01601f191660200182016040528015612a33576020820181803683370190505b509050600360fc1b81600081518110612a4e57612a4e6134ec565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612a7d57612a7d6134ec565b60200101906001600160f81b031916908160001a9053506000612aa184600261349b565b612aac906001613401565b90505b6001811115612b24576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612ae057612ae06134ec565b1a60f81b828281518110612af657612af66134ec565b60200101906001600160f81b031916908160001a90535060049490941c93612b1d8161373e565b9050612aaf565b5083156127b45760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610b5c565b600080612b7e6122e7565b805190915015612b95578051602090910120919050565b6065548015612ba45792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080612bd76122f6565b805190915015612bee578051602090910120919050565b6066548015612ba45792915050565b612c068161265a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606127b483836040518060600160405280602781526020016137f2602791396060600080856001600160a01b031685604051612c7a9190613755565b600060405180830381855af49150503d8060008114612cb5576040519150601f19603f3d011682016040523d82523d6000602084013e612cba565b606091505b5091509150612ccb86838387612cd5565b9695505050505050565b60608315612d42578251600003612d3b57612cef856121d4565b612d3b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b5c565b50816112c0565b6112c08383815115612d575781518083602001fd5b8060405162461bcd60e51b8152600401610b5c9190612e04565b600060208284031215612d8357600080fd5b81356001600160e01b0319811681146127b457600080fd5b600060208284031215612dad57600080fd5b5035919050565b60005b83811015612dcf578181015183820152602001612db7565b50506000910152565b60008151808452612df0816020860160208601612db4565b601f01601f19169290920160200192915050565b6020815260006127b46020830184612dd8565b6001600160a01b0381168114610c3857600080fd5b8035612e3781612e17565b919050565b60008060408385031215612e4f57600080fd5b8235612e5a81612e17565b946020939093013593505050565b600080600060608486031215612e7d57600080fd5b8335612e8881612e17565b92506020840135612e9881612e17565b929592945050506040919091013590565b60008060408385031215612ebc57600080fd5b823591506020830135612ece81612e17565b809150509250929050565b600060208284031215612eeb57600080fd5b81356127b481612e17565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215612f1f57600080fd5b8235612f2a81612e17565b915060208301356001600160401b0380821115612f4657600080fd5b818501915085601f830112612f5a57600080fd5b813581811115612f6c57612f6c612ef6565b604051601f8201601f19908116603f01168101908382118183101715612f9457612f94612ef6565b81604052828152886020848701011115612fad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008083601f840112612fe157600080fd5b5081356001600160401b03811115612ff857600080fd5b60208301915083602082850101111561301057600080fd5b9250929050565b60ff81168114610c3857600080fd5b8035612e3781613017565b60006080828403121561253257600080fd5b60008060008060008060008060008060006101608c8e03121561306557600080fd5b6001600160401b03808d35111561307b57600080fd5b6130888e8e358f01612fcf565b909c509a5060208d013581101561309e57600080fd5b6130ae8e60208f01358f01612fcf565b909a50985060408d01358110156130c457600080fd5b506130d58d60408e01358e01612fcf565b90975095506130e660608d01613026565b945060808c0135935060a08c0135925061310260c08d01612e2c565b91506131118d60e08e01613031565b90509295989b509295989b9093969950565b600081518084526020808501945080840160005b8381101561315357815187529582019590820190600101613137565b509495945050505050565b60ff60f81b8816815260e06020820152600061317d60e0830189612dd8565b828103604084015261318f8189612dd8565b606084018890526001600160a01b038716608085015260a0840186905283810360c085015290506131c08185613123565b9a9950505050505050505050565b600080600080608085870312156131e457600080fd5b84356131ef81612e17565b935060208501356131ff81612e17565b9250604085013561320f81612e17565b9150606085013561321f81612e17565b939692955090935050565b604080825283519082018190526000906020906060840190828701845b8281101561326c5781516001600160a01b031684529284019290840190600101613247565b50505083810382850152612ccb8186613123565b600080600080600080600060e0888a03121561329b57600080fd5b87356132a681612e17565b965060208801356132b681612e17565b9550604088013594506060880135935060808801356132d481613017565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561330457600080fd5b823561330f81612e17565b91506020830135612ece81612e17565b600181811c9082168061333357607f821691505b60208210810361253257634e487b7160e01b600052602260045260246000fd5b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092b5761092b6133eb565b80546001600160a01b0319166001600160a01b0392909216919091179055565b81358155602082013561344681612e17565b6134538160018401613414565b50604082013561346281612e17565b61346f8160028401613414565b50606082013561347e81612e17565b610adc8160038401613414565b8183823760009101908152919050565b808202811582820484141761092b5761092b6133eb565b6000602082840312156134c457600080fd5b81516127b481613017565b6000602082840312156134e157600080fd5b81516127b481612e17565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561351457600080fd5b5051919050565b60006001820161352d5761352d6133eb565b5060010190565b8181038181111561092b5761092b6133eb565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000826135af57634e487b7160e01b600052601260045260246000fd5b500490565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516135e6816017850160208801612db4565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613617816028840160208801612db4565b01602801949350505050565b601f821115610adc57600081815260208120601f850160051c8101602086101561364a5750805b601f850160051c820191505b8181101561206157828155600101613656565b81516001600160401b0381111561368257613682612ef6565b61369681613690845461331f565b84613623565b602080601f8311600181146136cb57600084156136b35750858301515b600019600386901b1c1916600185901b178555612061565b600085815260208120601f198616915b828110156136fa578886015182559484019460019091019084016136db565b50858210156137185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60008161374d5761374d6133eb565b506000190190565b60008251613767818460208701612db4565b919091019291505056fe3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848793a6c9b7e0a9549c74edc2f9ae0dc50903dfaa9a56fb0116b27a8c71de3e2c630d41a597cac127d8249d31298b50e481ee82c3f4a49ff93c76a22735aa9f3ad360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65649f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212200debb7fa82ef37a1d98ecbc59b4de774b499f6531eb0f142fcac41085b2d396364736f6c63430008120033