@settlemint/solidity-diamond-bond
Version:
Smart contract set to build an enterprise bond usecase in SettleMint
335 lines (334 loc) • 37 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "Diamond",
"sourceName": "contracts/Diamond.sol",
"abi": [
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "facetAddress",
"type": "address"
},
{
"internalType": "enum IDiamond.FacetCutAction",
"name": "action",
"type": "uint8"
},
{
"internalType": "bytes4[]",
"name": "functionSelectors",
"type": "bytes4[]"
}
],
"internalType": "struct IDiamond.FacetCut[]",
"name": "_diamondCut",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "init",
"type": "address"
},
{
"internalType": "bytes",
"name": "initCalldata",
"type": "bytes"
}
],
"internalType": "struct DiamondArgs",
"name": "_args",
"type": "tuple"
}
],
"stateMutability": "payable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "_selector",
"type": "bytes4"
}
],
"name": "CannotAddFunctionToDiamondThatAlreadyExists",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4[]",
"name": "_selectors",
"type": "bytes4[]"
}
],
"name": "CannotAddSelectorsToZeroAddress",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "_selector",
"type": "bytes4"
}
],
"name": "CannotRemoveFunctionThatDoesNotExist",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "_selector",
"type": "bytes4"
}
],
"name": "CannotRemoveImmutableFunction",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "_selector",
"type": "bytes4"
}
],
"name": "CannotReplaceFunctionThatDoesNotExists",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "_selector",
"type": "bytes4"
}
],
"name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4[]",
"name": "_selectors",
"type": "bytes4[]"
}
],
"name": "CannotReplaceFunctionsFromFacetWithZeroAddress",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "_selector",
"type": "bytes4"
}
],
"name": "CannotReplaceImmutableFunction",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "_functionSelector",
"type": "bytes4"
}
],
"name": "FunctionNotFound",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint8",
"name": "_action",
"type": "uint8"
}
],
"name": "IncorrectFacetCutAction",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "_initializationContractAddress",
"type": "address"
},
{
"internalType": "bytes",
"name": "_calldata",
"type": "bytes"
}
],
"name": "InitializationFunctionReverted",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "_contractAddress",
"type": "address"
},
{
"internalType": "string",
"name": "_message",
"type": "string"
}
],
"name": "NoBytecodeAtAddress",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "_facetAddress",
"type": "address"
}
],
"name": "NoSelectorsProvidedForFacetForCut",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "_facetAddress",
"type": "address"
}
],
"name": "RemoveFacetAddressMustBeZeroAddress",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "facetAddress",
"type": "address"
},
{
"internalType": "enum IDiamond.FacetCutAction",
"name": "action",
"type": "uint8"
},
{
"internalType": "bytes4[]",
"name": "functionSelectors",
"type": "bytes4[]"
}
],
"indexed": false,
"internalType": "struct IDiamond.FacetCut[]",
"name": "_diamondCut",
"type": "tuple[]"
},
{
"indexed": false,
"internalType": "address",
"name": "_init",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "_calldata",
"type": "bytes"
}
],
"name": "DiamondCut",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"stateMutability": "payable",
"type": "fallback"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "facetAddress",
"type": "address"
},
{
"internalType": "enum IDiamond.FacetCutAction",
"name": "action",
"type": "uint8"
},
{
"internalType": "bytes4[]",
"name": "functionSelectors",
"type": "bytes4[]"
}
],
"internalType": "struct IDiamond.FacetCut[]",
"name": "_diamondCut",
"type": "tuple[]"
},
{
"internalType": "address",
"name": "_init",
"type": "address"
},
{
"internalType": "bytes",
"name": "_calldata",
"type": "bytes"
}
],
"name": "diamondCut",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x608060405261230480380380610014816109a0565b9283398101906040818303126108875780516001600160401b0381116108875781019180601f8401121561088757825191610056610051846109c5565b6109a0565b93602085858152016020819560051b830101918483116108875760208101915b83831061088c57505050506020810151906001600160401b0382116108875701606081830312610887576100a8610962565b6100b1826109dc565b81526100bf602083016109dc565b60208201908152604083015190926001600160401b038211610887570183601f820112156108875780516100f5610051826109f0565b94818652602082840101116108875761011691602080879897019101610a0b565b60408101849052517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f80546001600160a01b039283166001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3516001600160a01b0316926000925b81518410156107a45760406101a88584610a2e565b510151916001600160a01b036101be8683610a2e565b5151169383511561078f5760206101d58784610a2e565b5101516003811015610779576000816103f757505084156103d15761ffff6000805160206122e483398151915254169261024f61021260606109a0565b602481527f4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20602082015263636f646560e01b604082015287610bf4565b6000935b85518510156103b9576001600160e01b031961026f8688610a2e565b511660008181526000805160206122c483398151915260205260409020546001600160a01b03166103a5576103056102a5610981565b89815261ffff93909316602080850182815260008581526000805160206122c483398151915290925260409091209451855491516001600160b01b03199092166001600160a01b03919091161760a09190911b61ffff60a01b1617909355565b6000805160206122e483398151915254906801000000000000000082101561038f5761034782600161036494016000805160206122e483398151915255610abb565b90919063ffffffff83549160031b9260e01c831b921b1916179055565b61ffff81146103795760019485019401610253565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b63ebbf5d0760e01b60005260045260246000fd5b5094509490959250600191505b019291939093610193565b6040516302b8da0760e21b815260206004820152806103f36024820187610a58565b0390fd5b5094969460018103610563575086156105415791939161045b61041a60606109a0565b602881527f4c69624469616d6f6e644375743a205265706c61636520666163657420686173602082015267206e6f20636f646560c01b604082015288610bf4565b6001600160a01b0387169460005b8551811015610530576001600160e01b03196104858288610a2e565b511660008181526000805160206122c483398151915260205260409020546001600160a01b031630811461051b578a811461050657156104f25760009081526000805160206122c48339815191526020526040902080546001600160a01b03191688179055600101610469565b637479f93960e01b60005260045260246000fd5b50631ac6ce8d60e11b60005260045260246000fd5b50632901806d60e11b60005260045260246000fd5b5094509490955060019192506103c6565b60405163cd98a96f60e01b815260206004820152806103f36024820187610a58565b9394939192909160006002820361075f5750506000805160206122e483398151915254968061074b575060005b855181101561073d576001600160e01b03196105ac8288610a2e565b511690816000526000805160206122c48339815191526020526040600020986105d3610981565b99549960018060a01b038b1680825261ffff602083019c60a01c168c521561072857516001600160a01b031630146107135780156103795760001901988961ffff8251160361069d575b506000805160206122e483398151915254918215610687576001926000190161064581610abb565b63ffffffff82549160031b1b191690556000805160206122e4833981519152556000526000805160206122c48339815191526020526000604081205501610590565b634e487b7160e01b600052603160045260246000fd5b61070d9061ffff6106ad8c610abb565b90549060031b1c60e01b916106c88361034784845116610abb565b516001600160e01b031990921660009081526000805160206122c483398151915260205260409020805461ffff60a01b19169190921660a01b61ffff60a01b16179055565b3861061d565b82630df5fd6160e31b60005260045260246000fd5b83637a08a22d60e01b60005260045260246000fd5b5093509360019195506103c6565b63d091bc8160e01b60005260045260246000fd5b60ff925050633ff4d20f60e11b6000521660045260246000fd5b634e487b7160e01b600052602160045260246000fd5b8463e767f91f60e01b60005260045260246000fd5b848360405193606085019060608652518091526080850160808260051b870101929160005b8181106108275761081887877f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738b806108108b856020840152828103604084015286610a96565b0390a1610b16565b6040516116909081610c348239f35b878503607f19018352835180516001600160a01b0316865260208101519495939492939192919060038310156107795761087b82606060406020959460019787809701520151918160408201520190610a58565b960194019291016107c9565b600080fd5b82516001600160401b0381116108875782016060818803601f190112610887576108b4610962565b906108c1602082016109dc565b82526040810151600381101561088757602083015260608101516001600160401b03811161088757602091010187601f82011215610887578051610907610051826109c5565b9160208084848152019260051b820101908a821161088757602001915b818310610941575050506040820152815260209283019201610076565b82516001600160e01b03198116810361088757815260209283019201610924565b60405190606082016001600160401b0381118382101761038f57604052565b60408051919082016001600160401b0381118382101761038f57604052565b6040519190601f01601f191682016001600160401b0381118382101761038f57604052565b6001600160401b03811161038f5760051b60200190565b51906001600160a01b038216820361088757565b6001600160401b03811161038f57601f01601f191660200190565b60005b838110610a1e5750506000910152565b8181015183820152602001610a0e565b8051821015610a425760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b906020808351928381520192019060005b818110610a765750505090565b82516001600160e01b031916845260209384019390920191600101610a69565b90602091610aaf81518092818552858086019101610a0b565b601f01601f1916010190565b906000805160206122e483398151915254821015610a42576000805160206122e4833981519152600052600382901c7fc0d727610ea16241eff4447d08bb1b4595f7d2ec4515282437a13b7d0df4b922019160021b601c1690565b6001600160a01b03811691908215610bef5760008091610b7a610b3960606109a0565b602881527f4c69624469616d6f6e644375743a205f696e6974206164647265737320686173602082015267206e6f20636f646560c01b604082015282610bf4565b83519060208501905af4913d15610be7573d92610b99610051856109f0565b9384523d6000602086013e5b15610baf57505050565b825115610bbe57825160208401fd5b6103f360405192839263192105d760e01b84526004840152604060248401526044830190610a96565b606092610ba5565b505050565b803b15610bff575050565b6040805163919834b960e01b81526001600160a01b03909216600483015260248201529081906103f3906044830190610a9656fe60806040526004361015610015575b3661038157005b60003560e01c631f931c1c0361000e57346100e35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e35760043567ffffffffffffffff81116100e357366023820112156100e3578060040135610087610082826102ae565b61026a565b916024602084848152019260051b820101903682116100e35760248101925b8284106100e857846100b66102c6565b906044359167ffffffffffffffff83116100e3576100db6100e1933690600401610344565b9161066d565b005b600080fd5b833567ffffffffffffffff81116100e357820160607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82360301126100e35761012f610225565b9061013c602482016102e9565b8252604481013560038110156100e3576020830152606481013567ffffffffffffffff81116100e357602491010136601f820112156100e3578035610183610082826102ae565b9160208084848152019260051b820101903682116100e357602001915b8183106101bd5750505060408201528152602093840193016100a6565b82357fffffffff00000000000000000000000000000000000000000000000000000000811681036100e3578152602092830192016101a0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051906060820182811067ffffffffffffffff82111761024557604052565b6101f6565b604051906040820182811067ffffffffffffffff82111761024557604052565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761024557604052565b67ffffffffffffffff81116102455760051b60200190565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100e357565b359073ffffffffffffffffffffffffffffffffffffffff821682036100e357565b67ffffffffffffffff811161024557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f820112156100e35780359061035e6100828361030a565b92828452602083830101116100e357816000926020809301838601378301015290565b7fffffffff0000000000000000000000000000000000000000000000000000000060003516806000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c60205273ffffffffffffffffffffffffffffffffffffffff604060002054169081156104125760008083368280378136915af43d6000803e1561040d573d6000f35b3d6000fd5b7f5416eb980000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156104825760209160051b010190565b61043f565b6003111561049157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b5160038110156104915790565b919082519283825260005b8481106105175750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016104d8565b9392909193606081016060825283518091526080820190602060808260051b8501019501916000905b82821061059757505050506105876105949495602083019073ffffffffffffffffffffffffffffffffffffffff169052565b60408184039101526104cd565b90565b909192957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808582030182528651606082019073ffffffffffffffffffffffffffffffffffffffff8151168352602081015190600382101561049157604060809160209384870152015193606060408201528451809452019201906000905b80821061063357505050602080600192980192019201909291610555565b9091926020806001927fffffffff000000000000000000000000000000000000000000000000000000008751168152019401920190610615565b92909160005b84518110156107b8576040610688828761046e565b5101516106b3610698838861046e565b515173ffffffffffffffffffffffffffffffffffffffff1690565b815115610775576106d060206106c9858a61046e565b51016104c0565b6106d981610487565b806106f25750600192916106ec916112c1565b01610673565b6106fb81610487565b6001810361071657506001929161071191610e7a565b6106ec565b61071f81610487565b6002810361073557506001929161071191610a06565b8061074261077192610487565b7f7fe9a41e0000000000000000000000000000000000000000000000000000000060005260ff16600452602490565b6000fd5b7fe767f91f0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b509092917f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673816107fa946107f2856040519384938461052c565b0390a161150c565b565b9061ffff61080861024a565b925473ffffffffffffffffffffffffffffffffffffffff8116845260a01c166020830152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8015610888577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b61082e565b907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d54821015610482577fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d600052600382901c7fc0d727610ea16241eff4447d08bb1b4595f7d2ec4515282437a13b7d0df4b922019160021b601c1690565b919091805483101561048257600052601c60206000208360031c019260021b1690565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d5480156109d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016109a3817fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d61090c565b63ffffffff82549160031b1b191690557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d55565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b91907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d549273ffffffffffffffffffffffffffffffffffffffff8116610d7e575060005b8151811015610d7857610a86610a60828461046e565b517fffffffff000000000000000000000000000000000000000000000000000000001690565b610ae3610ade827fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b6107fc565b94610b1e610b05875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b15610d285730610b45610b05885173ffffffffffffffffffffffffffffffffffffffff1690565b14610cd857610bd1600193926020610b5e60009461085d565b98018861ffff610b70835161ffff1690565b1603610bd8575b50610b8061092f565b7fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b5501610a4a565b610cd290610c8b610c39610bfb610bee8d61088d565b90549060031b1c60e01b90565b92610c3184610c14610c0f845161ffff1690565b61088d565b90919063ffffffff83549160031b9260e01c831b921b1916179055565b5161ffff1690565b917fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b907fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff75ffff000000000000000000000000000000000000000083549260a01b169116179055565b38610b77565b7f6fafeb08000000000000000000000000000000000000000000000000000000006000527fffffffff00000000000000000000000000000000000000000000000000000000821660045260246000fd5b7f7a08a22d000000000000000000000000000000000000000000000000000000006000527fffffffff00000000000000000000000000000000000000000000000000000000821660045260246000fd5b50509050565b7fd091bc810000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b602060408183019282815284518094520192019060005b818110610de55750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101610dd8565b610e27606061026a565b90602882527f206e6f20636f64650000000000000000000000000000000000000000000000006040837f4c69624469616d6f6e644375743a205265706c6163652066616365742068617360208201520152565b73ffffffffffffffffffffffffffffffffffffffff8116929183156110e357610eaa610ea4610e1d565b836115f4565b60005b81518110156110dc57610ec3610a60828461046e565b610f38610b05610f1e837fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b30811461108c5786811461103c5715610fed5790610fe784610fa76001947fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b01610ead565b7f7479f939000000000000000000000000000000000000000000000000000000006000527fffffffff000000000000000000000000000000000000000000000000000000001660045260246000fd5b7f358d9d1a000000000000000000000000000000000000000000000000000000006000527fffffffff00000000000000000000000000000000000000000000000000000000821660045260246000fd5b7f520300da000000000000000000000000000000000000000000000000000000006000527fffffffff00000000000000000000000000000000000000000000000000000000821660045260246000fd5b5050509050565b611119906040519182917fcd98a96f00000000000000000000000000000000000000000000000000000000835260048301610dc1565b0390fd5b611127606061026a565b90602482527f636f6465000000000000000000000000000000000000000000000000000000006040837f4c69624469616d6f6e644375743a2041646420666163657420686173206e6f2060208201520152565b61ffff60206107fa936111df73ffffffffffffffffffffffffffffffffffffffff825116859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b015182547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16911660a01b75ffff000000000000000000000000000000000000000016179055565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d54906801000000000000000082101561024557610c148260016107fa94017fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d61090c565b61ffff1661ffff81146108885760010190565b919073ffffffffffffffffffffffffffffffffffffffff831615611483577fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d5461ffff169061131761131161111d565b856115f4565b6000915b81518310156110dc57611331610a60848461046e565b61138c610b05610f1e837fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b6114345760019161142761142c926114226113a561024a565b73ffffffffffffffffffffffffffffffffffffffff8b16815261ffff8516602082015261141d837fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b61117a565b611227565b6112ae565b92019161131b565b7febbf5d07000000000000000000000000000000000000000000000000000000006000527fffffffff000000000000000000000000000000000000000000000000000000001660045260246000fd5b611119906040519182917f0ae3681c00000000000000000000000000000000000000000000000000000000835260048301610dc1565b3d156114da573d906114cd6100828361030a565b9182523d6000602084013e565b606090565b60409073ffffffffffffffffffffffffffffffffffffffff610594949316815281602082015201906104cd565b9073ffffffffffffffffffffffffffffffffffffffff8216156115f05761158c611536606061026a565b602881527f4c69624469616d6f6e644375743a205f696e697420616464726573732068617360208201527f206e6f20636f64650000000000000000000000000000000000000000000000006040820152836115f4565b600080825160208401855af4916115a16114b9565b92156115ac57505050565b8251156115bb57825160208401fd5b6111196040519283927f192105d7000000000000000000000000000000000000000000000000000000008452600484016114df565b5050565b90813b15611600575050565b9061111973ffffffffffffffffffffffffffffffffffffffff926040519384937f919834b90000000000000000000000000000000000000000000000000000000085521660048401526040602484015260448301906104cd56fea26469706673582212208378868e4c428a8cabe8bd5cd37d0a44eb04e7393b1aeb0f03c4f93dd6dc171464736f6c634300081b0033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131cc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d",
"deployedBytecode": "0x60806040526004361015610015575b3661038157005b60003560e01c631f931c1c0361000e57346100e35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e35760043567ffffffffffffffff81116100e357366023820112156100e3578060040135610087610082826102ae565b61026a565b916024602084848152019260051b820101903682116100e35760248101925b8284106100e857846100b66102c6565b906044359167ffffffffffffffff83116100e3576100db6100e1933690600401610344565b9161066d565b005b600080fd5b833567ffffffffffffffff81116100e357820160607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82360301126100e35761012f610225565b9061013c602482016102e9565b8252604481013560038110156100e3576020830152606481013567ffffffffffffffff81116100e357602491010136601f820112156100e3578035610183610082826102ae565b9160208084848152019260051b820101903682116100e357602001915b8183106101bd5750505060408201528152602093840193016100a6565b82357fffffffff00000000000000000000000000000000000000000000000000000000811681036100e3578152602092830192016101a0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051906060820182811067ffffffffffffffff82111761024557604052565b6101f6565b604051906040820182811067ffffffffffffffff82111761024557604052565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761024557604052565b67ffffffffffffffff81116102455760051b60200190565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100e357565b359073ffffffffffffffffffffffffffffffffffffffff821682036100e357565b67ffffffffffffffff811161024557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f820112156100e35780359061035e6100828361030a565b92828452602083830101116100e357816000926020809301838601378301015290565b7fffffffff0000000000000000000000000000000000000000000000000000000060003516806000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c60205273ffffffffffffffffffffffffffffffffffffffff604060002054169081156104125760008083368280378136915af43d6000803e1561040d573d6000f35b3d6000fd5b7f5416eb980000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156104825760209160051b010190565b61043f565b6003111561049157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b5160038110156104915790565b919082519283825260005b8481106105175750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016104d8565b9392909193606081016060825283518091526080820190602060808260051b8501019501916000905b82821061059757505050506105876105949495602083019073ffffffffffffffffffffffffffffffffffffffff169052565b60408184039101526104cd565b90565b909192957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808582030182528651606082019073ffffffffffffffffffffffffffffffffffffffff8151168352602081015190600382101561049157604060809160209384870152015193606060408201528451809452019201906000905b80821061063357505050602080600192980192019201909291610555565b9091926020806001927fffffffff000000000000000000000000000000000000000000000000000000008751168152019401920190610615565b92909160005b84518110156107b8576040610688828761046e565b5101516106b3610698838861046e565b515173ffffffffffffffffffffffffffffffffffffffff1690565b815115610775576106d060206106c9858a61046e565b51016104c0565b6106d981610487565b806106f25750600192916106ec916112c1565b01610673565b6106fb81610487565b6001810361071657506001929161071191610e7a565b6106ec565b61071f81610487565b6002810361073557506001929161071191610a06565b8061074261077192610487565b7f7fe9a41e0000000000000000000000000000000000000000000000000000000060005260ff16600452602490565b6000fd5b7fe767f91f0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b509092917f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673816107fa946107f2856040519384938461052c565b0390a161150c565b565b9061ffff61080861024a565b925473ffffffffffffffffffffffffffffffffffffffff8116845260a01c166020830152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8015610888577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b61082e565b907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d54821015610482577fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d600052600382901c7fc0d727610ea16241eff4447d08bb1b4595f7d2ec4515282437a13b7d0df4b922019160021b601c1690565b919091805483101561048257600052601c60206000208360031c019260021b1690565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d5480156109d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016109a3817fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d61090c565b63ffffffff82549160031b1b191690557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d55565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b91907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d549273ffffffffffffffffffffffffffffffffffffffff8116610d7e575060005b8151811015610d7857610a86610a60828461046e565b517fffffffff000000000000000000000000000000000000000000000000000000001690565b610ae3610ade827fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b6107fc565b94610b1e610b05875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b15610d285730610b45610b05885173ffffffffffffffffffffffffffffffffffffffff1690565b14610cd857610bd1600193926020610b5e60009461085d565b98018861ffff610b70835161ffff1690565b1603610bd8575b50610b8061092f565b7fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b5501610a4a565b610cd290610c8b610c39610bfb610bee8d61088d565b90549060031b1c60e01b90565b92610c3184610c14610c0f845161ffff1690565b61088d565b90919063ffffffff83549160031b9260e01c831b921b1916179055565b5161ffff1690565b917fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b907fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff75ffff000000000000000000000000000000000000000083549260a01b169116179055565b38610b77565b7f6fafeb08000000000000000000000000000000000000000000000000000000006000527fffffffff00000000000000000000000000000000000000000000000000000000821660045260246000fd5b7f7a08a22d000000000000000000000000000000000000000000000000000000006000527fffffffff00000000000000000000000000000000000000000000000000000000821660045260246000fd5b50509050565b7fd091bc810000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b602060408183019282815284518094520192019060005b818110610de55750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101610dd8565b610e27606061026a565b90602882527f206e6f20636f64650000000000000000000000000000000000000000000000006040837f4c69624469616d6f6e644375743a205265706c6163652066616365742068617360208201520152565b73ffffffffffffffffffffffffffffffffffffffff8116929183156110e357610eaa610ea4610e1d565b836115f4565b60005b81518110156110dc57610ec3610a60828461046e565b610f38610b05610f1e837fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b30811461108c5786811461103c5715610fed5790610fe784610fa76001947fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b01610ead565b7f7479f939000000000000000000000000000000000000000000000000000000006000527fffffffff000000000000000000000000000000000000000000000000000000001660045260246000fd5b7f358d9d1a000000000000000000000000000000000000000000000000000000006000527fffffffff00000000000000000000000000000000000000000000000000000000821660045260246000fd5b7f520300da000000000000000000000000000000000000000000000000000000006000527fffffffff00000000000000000000000000000000000000000000000000000000821660045260246000fd5b5050509050565b611119906040519182917fcd98a96f00000000000000000000000000000000000000000000000000000000835260048301610dc1565b0390fd5b611127606061026a565b90602482527f636f6465000000000000000000000000000000000000000000000000000000006040837f4c69624469616d6f6e644375743a2041646420666163657420686173206e6f2060208201520152565b61ffff60206107fa936111df73ffffffffffffffffffffffffffffffffffffffff825116859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b015182547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16911660a01b75ffff000000000000000000000000000000000000000016179055565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d54906801000000000000000082101561024557610c148260016107fa94017fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d61090c565b61ffff1661ffff81146108885760010190565b919073ffffffffffffffffffffffffffffffffffffffff831615611483577fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d5461ffff169061131761131161111d565b856115f4565b6000915b81518310156110dc57611331610a60848461046e565b61138c610b05610f1e837fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b6114345760019161142761142c926114226113a561024a565b73ffffffffffffffffffffffffffffffffffffffff8b16815261ffff8516602082015261141d837fffffffff00000000000000000000000000000000000000000000000000000000166000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604060002090565b61117a565b611227565b6112ae565b92019161131b565b7febbf5d07000000000000000000000000000000000000000000000000000000006000527fffffffff000000000000000000000000000000000000000000000000000000001660045260246000fd5b611119906040519182917f0ae3681c00000000000000000000000000000000000000000000000000000000835260048301610dc1565b3d156114da573d906114cd6100828361030a565b9182523d6000602084013e565b606090565b60409073ffffffffffffffffffffffffffffffffffffffff610594949316815281602082015201906104cd565b9073ffffffffffffffffffffffffffffffffffffffff8216156115f05761158c611536606061026a565b602881527f4c69624469616d6f6e644375743a205f696e697420616464726573732068617360208201527f206e6f20636f64650000000000000000000000000000000000000000000000006040820152836115f4565b600080825160208401855af4916115a16114b9565b92156115ac57505050565b8251156115bb57825160208401fd5b6111196040519283927f192105d7000000000000000000000000000000000000000000000000000000008452600484016114df565b5050565b90813b15611600575050565b9061111973ffffffffffffffffffffffffffffffffffffffff926040519384937f919834b90000000000000000000000000000000000000000000000000000000085521660048401526040602484015260448301906104cd56fea26469706673582212208378868e4c428a8cabe8bd5cd37d0a44eb04e7393b1aeb0f03c4f93dd6dc171464736f6c634300081b0033",
"linkReferences": {},
"deployedLinkReferences": {}
}