{
  "_format": "hh-sol-artifact-1",
  "contractName": "DebtIssuanceModule",
  "sourceName": "contracts/protocol/modules/v1/DebtIssuanceModule.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IController",
          "name": "_controller",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newFeeRecipient",
          "type": "address"
        }
      ],
      "name": "FeeRecipientUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newIssueFee",
          "type": "uint256"
        }
      ],
      "name": "IssueFeeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newRedeemFee",
          "type": "uint256"
        }
      ],
      "name": "RedeemFeeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_issuer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_hookContract",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_managerFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_protocolFee",
          "type": "uint256"
        }
      ],
      "name": "SetTokenIssued",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_redeemer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_managerFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_protocolFee",
          "type": "uint256"
        }
      ],
      "name": "SetTokenRedeemed",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "_isIssue",
          "type": "bool"
        }
      ],
      "name": "calculateTotalFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalQuantity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "managerFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "protocolFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "internalType": "contract IController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "getModuleIssuanceHooks",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        }
      ],
      "name": "getRequiredComponentIssuanceUnits",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        }
      ],
      "name": "getRequiredComponentRedemptionUnits",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_maxManagerFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_managerIssueFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_managerRedeemFee",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_feeRecipient",
          "type": "address"
        },
        {
          "internalType": "contract IManagerIssuanceHook",
          "name": "_managerIssuanceHook",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_hook",
          "type": "address"
        }
      ],
      "name": "isModuleIssuanceHook",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        }
      ],
      "name": "issuanceSettings",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "maxManagerFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "managerIssueFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "managerRedeemFee",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        },
        {
          "internalType": "contract IManagerIssuanceHook",
          "name": "managerIssuanceHook",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "issue",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "redeem",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "registerToIssuanceModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "removeModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "unregisterFromIssuanceModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_newFeeRecipient",
          "type": "address"
        }
      ],
      "name": "updateFeeRecipient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_newIssueFee",
          "type": "uint256"
        }
      ],
      "name": "updateIssueFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_newRedeemFee",
          "type": "uint256"
        }
      ],
      "name": "updateRedeemFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620036d7380380620036d783398101604081905262000034916200005e565b600080546001600160a01b0319166001600160a01b0392909216919091179055600180556200008e565b60006020828403121562000070578081fd5b81516001600160a01b038116811462000087578182fd5b9392505050565b613639806200009e6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063847ef08d11610097578063cd3c753911610066578063cd3c753914610221578063d9b1b6e014610245578063e079962014610258578063f77c47911461026b57610100565b8063847ef08d146101d15780638dda4037146101d9578063bf9fe138146101fb578063cb38b2231461020e57610100565b806363082446116100d357806363082446146101785780636b8e53b6146101985780636d78f47a146101ab5780636dd86aa9146101be57610100565b806308bc0e1114610105578063131e26b91461012e5780635c833bfd146101505780635d98c37314610165575b600080fd5b610118610113366004612ac5565b610280565b6040516101259190612dd3565b60405180910390f35b61014161013c366004612b19565b6102f9565b60405161012593929190612de6565b61016361015e366004612b44565b61032a565b005b610163610173366004612ae1565b6104ae565b61018b610186366004612ae1565b61058e565b6040516101259190612e1d565b6101416101a6366004612b19565b6105c2565b6101636101b9366004612b44565b6105e5565b6101636101cc366004612b19565b610773565b61016361083f565b6101ec6101e7366004612b85565b6108c2565b60405161012593929190613548565b610163610209366004612bbb565b610a98565b61016361021c366004612b19565b610c1b565b61023461022f366004612ac5565b610ce6565b60405161012595949392919061355e565b610163610253366004612ac5565b610d22565b610163610266366004612ac5565b610dda565b610273610e90565b6040516101259190612d12565b6001600160a01b0381166000908152600260209081526040918290206005018054835181840281018401909452808452606093928301828280156102ed57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102cf575b50505050509050919050565b6060806060600061030c868660016108c2565b5050905061031c86826001610e9f565b935093509350509250925092565b600260015414156103565760405162461bcd60e51b815260040161034d906134c5565b60405180910390fd5b6002600155826103658161101e565b600083116103855760405162461bcd60e51b815260040161034d90612f9e565b61038f8484611046565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac906103bd9033908790600401612d26565b600060405180830381600087803b1580156103d757600080fd5b505af11580156103eb573d6000803e3d6000fd5b505050506000806000610400878760006108c2565b92509250925060608060606104178a876000610e9f565b92509250925061042b8a876000868561114d565b61043a8a878a600087876111f3565b6104458a868661129a565b876001600160a01b0316336001600160a01b03168b6001600160a01b03167f54f4ed50e49638053e1655b45ee7ece434edd150e6771ac0aaedb8355be13a338c898960405161049693929190613548565b60405180910390a45050600180555050505050505050565b816104b881611405565b6001600160a01b0382166104de5760405162461bcd60e51b815260040161034d906132c5565b6001600160a01b038084166000908152600260205260409020600301548382169116141561051e5760405162461bcd60e51b815260040161034d9061328e565b6001600160a01b038381166000818152600260205260409081902060030180546001600160a01b0319169386169390931790925590517faaebcf1bfa00580e41d966056b48521fa9f202645c86d4ddf28113e617c1b1d390610581908590612d12565b60405180910390a2505050565b6001600160a01b038083166000908152600260209081526040808320938516835260069093019052205460ff165b92915050565b606080606060006105d5868660006108c2565b5050905061031c86826000610e9f565b600260015414156106085760405162461bcd60e51b815260040161034d906134c5565b6002600155826106178161101e565b600083116106375760405162461bcd60e51b815260040161034d9061307a565b60006106458585338661142b565b905061065185856114cc565b6000806000610662888860016108c2565b92509250925060608060606106798b876001610e9f565b92509250925061068e8b878b600187876111f3565b61069c8b876001868561114d565b6106a78b868661129a565b6040516340c10f1960e01b81526001600160a01b038c16906340c10f19906106d5908c908e90600401612d26565b600060405180830381600087803b1580156106ef57600080fd5b505af1158015610703573d6000803e3d6000fd5b50505050886001600160a01b0316336001600160a01b03168c6001600160a01b03167f1abc43bc3dd8b6c8bb9bcf1a14a84f83981bf5335700ef07758efefcb03a8c758a8e8a8a60405161075a9493929190612dad565b60405180910390a4505060018055505050505050505050565b8161077d81611405565b6001600160a01b0383166000908152600260205260409020548211156107b55760405162461bcd60e51b815260040161034d90612ebf565b6001600160a01b038316600090815260026020819052604090912001548214156107f15760405162461bcd60e51b815260040161034d90612ef6565b6001600160a01b03831660008181526002602081905260409182902001849055517f676eda176d6aa20e9aa09b9ee131487c90646cd2b951176f75bd6fccdc0261779061058190859061353f565b336000908152600260205260409020600501541561086f5760405162461bcd60e51b815260040161034d90613482565b3360009081526002602081905260408220828155600181018390559081018290556003810180546001600160a01b03199081169091556004820180549091169055906108be6005830182612843565b5050565b60008060006108cf612861565b6001600160a01b03808816600090815260026020818152604092839020835160c0810185528154815260018201548184015292810154838501526003810154851660608401526004810154909416608083015260058401805484518184028101840190955280855292949360a0860193909283018282801561097a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161095c575b5050509190925250506000805460405163792aa04f60e01b815293945090926001600160a01b03909116915063792aa04f906109bc9030908590600401612d26565b60206040518083038186803b1580156109d457600080fd5b505afa1580156109e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0c9190612c40565b9050600086610a1f578260400151610a25565b82602001515b90506000610a39828a63ffffffff6115cd16565b9050610a4b818463ffffffff6115cd16565b9450610a5d818663ffffffff6115fe16565b955087610a7957610a74898263ffffffff6115fe16565b610a89565b610a89898263ffffffff61164016565b96505050505093509350939050565b8533610aa48282611665565b87610aae8161168b565b87871115610ace5760405162461bcd60e51b815260040161034d90613215565b87861115610aee5760405162461bcd60e51b815260040161034d906134fc565b6040805160c08101825289815260208082018a90528183018990526001600160a01b0388811660608401528716608083015282516000808252918101909352909160a08301915090526001600160a01b03808b1660009081526002602081815260409283902085518155858201516001820155928501519183019190915560608401516003830180549185166001600160a01b031992831617905560808501516004840180549190951691161790925560a083015180519192610bb9926005850192909101906128a9565b50905050886001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bf857600080fd5b505af1158015610c0c573d6000803e3d6000fd5b50505050505050505050505050565b81610c2581611405565b6001600160a01b038316600090815260026020526040902054821115610c5d5760405162461bcd60e51b815260040161034d90613043565b6001600160a01b038316600090815260026020526040902060010154821415610c985760405162461bcd60e51b815260040161034d9061319f565b6001600160a01b03831660008181526002602052604090819020600101849055517fd1de57b1db6a29967f337d6f744b7811624dabf2be924c65708336a81678d0779061058190859061353f565b60026020819052600091825260409091208054600182015492820154600383015460049093015491939290916001600160a01b03918216911685565b80610d2c8161174c565b81610d368161101e565b6001600160a01b038316600090815260026020908152604080832033845260060190915290205460ff1615610d7d5760405162461bcd60e51b815260040161034d90613343565b50506001600160a01b03166000908152600260209081526040808320600581018054600181810183559186528486200180546001600160a01b0319163390811790915585526006909101909252909120805460ff19169091179055565b80610de48161174c565b81610dee8161101e565b6001600160a01b038316600090815260026020908152604080832033845260060190915290205460ff16610e345760405162461bcd60e51b815260040161034d90612f6e565b6001600160a01b0383166000908152600260205260409020610e5f906005013363ffffffff61188e16565b50506001600160a01b031660009081526002602090815260408083203384526006019091529020805460ff19169055565b6000546001600160a01b031681565b606080606080606080610eb1896119ba565b8251929550909350915060608167ffffffffffffffff81118015610ed457600080fd5b50604051908082528060200260200182016040528015610efe578160200160208202803683370190505b50905060608267ffffffffffffffff81118015610f1a57600080fd5b50604051908082528060200260200182016040528015610f44578160200160208202803683370190505b50905060005b865181101561100a578a610f8357610f7e8c878381518110610f6857fe5b60200260200101516115cd90919063ffffffff16565b610fa9565b610fa98c878381518110610f9357fe5b6020026020010151611d4b90919063ffffffff16565b838281518110610fb557fe5b6020026020010181815250508a610fdb57610fd68c868381518110610f9357fe5b610feb565b610feb8c868381518110610f6857fe5b828281518110610ff757fe5b6020908102919091010152600101610f4a565b50949b909a50939850929650505050505050565b61102781611da2565b6110435760405162461bcd60e51b815260040161034d90612f26565b50565b6001600160a01b0382166000908152600260209081526040918290206005018054835181840281018401909452808452606093928301828280156110b357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611095575b50939450600093505050505b8151811015611147578181815181106110d457fe5b60200260200101516001600160a01b0316633fe6106b85856040518363ffffffff1660e01b8152600401611109929190612d26565b600060405180830381600087803b15801561112357600080fd5b505af1158015611137573d6000803e3d6000fd5b5050600190920191506110bf9050565b50505050565b60005b82518110156111eb57600083828151811061116757fe5b60200260200101519050600083838151811061117f57fe5b6020026020010151905060008111156111e15785156111c7576111a788888460016000611ea6565b6111c26001600160a01b03891683338463ffffffff61206016565b6111e1565b6111d382338a846121a2565b6111e1888884600080611ea6565b5050600101611150565b505050505050565b60005b825181101561129157600083828151811061120d57fe5b60200260200101519050600083838151811061122557fe5b60200260200101519050600081111561128757851561125d5761124a82338b846121a2565b611258898984600180611ea6565b611287565b61126c89898460006001611ea6565b6112876001600160a01b038a1683898463ffffffff61206016565b50506001016111f6565b50505050505050565b8115611400576001600160a01b03808416600081815260026020526040908190206003015490516340c10f1960e01b815291926340c10f19926112e592909116908690600401612d26565b600060405180830381600087803b1580156112ff57600080fd5b505af1158015611313573d6000803e3d6000fd5b50505050600081111561140057826001600160a01b03166340c10f196000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b15801561137c57600080fd5b505afa158015611390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b49190612956565b836040518363ffffffff1660e01b81526004016113d2929190612d26565b600060405180830381600087803b1580156113ec57600080fd5b505af1158015611291573d6000803e3d6000fd5b505050565b61140f81336121ae565b61101e5760405162461bcd60e51b815260040161034d90613401565b6001600160a01b0380851660009081526002602052604081206004015490911680156114be5760405163a045808360e01b81526001600160a01b0382169063a045808390611483908990899089908990600401612e28565b600060405180830381600087803b15801561149d57600080fd5b505af11580156114b1573d6000803e3d6000fd5b50505050809150506114c4565b60009150505b949350505050565b6001600160a01b03821660009081526002602090815260409182902060050180548351818402810184019094528084526060939283018282801561153957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161151b575b50939450600093505050505b81518110156111475781818151811061155a57fe5b60200260200101516001600160a01b031663c153dd0785856040518363ffffffff1660e01b815260040161158f929190612d26565b600060405180830381600087803b1580156115a957600080fd5b505af11580156115bd573d6000803e3d6000fd5b5050600190920191506115459050565b60006115f7670de0b6b3a76400006115eb858563ffffffff61223c16565b9063ffffffff61227616565b9392505050565b60006115f783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122b8565b6000828201838110156115f75760405162461bcd60e51b815260040161034d90612fd5565b61166f82826121ae565b6108be5760405162461bcd60e51b815260040161034d90613401565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906116bb908490600401612d12565b60206040518083038186803b1580156116d357600080fd5b505afa1580156116e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170b9190612a1d565b6117275760405162461bcd60e51b815260040161034d906133be565b611730816122e4565b6110435760405162461bcd60e51b815260040161034d9061300c565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e529061177a903390600401612d12565b60206040518083038186803b15801561179257600080fd5b505afa1580156117a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ca9190612c21565b60028111156117d557fe5b146117f25760405162461bcd60e51b815260040161034d90613127565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e38990611822903390600401612d12565b60206040518083038186803b15801561183a57600080fd5b505afa15801561184e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118729190612a1d565b6110435760405162461bcd60e51b815260040161034d9061337a565b6000806118f4848054806020026020016040519081016040528092919081815260200182805480156118e957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116118cb575b505050505084612313565b91509150806119155760405162461bcd60e51b815260040161034d90612e90565b8354600019018281146119875784818154811061192e57fe5b9060005260206000200160009054906101000a90046001600160a01b031685848154811061195857fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8480548061199157fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b606080606080846001600160a01b03166399d50d5d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156119f957600080fd5b505afa158015611a0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a359190810190612972565b805190915060608167ffffffffffffffff81118015611a5357600080fd5b50604051908082528060200260200182016040528015611a7d578160200160208202803683370190505b50905060608267ffffffffffffffff81118015611a9957600080fd5b50604051908082528060200260200182016040528015611ac3578160200160208202803683370190505b50905060005b8451811015611d3b576000858281518110611ae057fe5b6020026020010151905060008a6001600160a01b03166366cb8d2f836040518263ffffffff1660e01b8152600401611b189190612d12565b60206040518083038186803b158015611b3057600080fd5b505afa158015611b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b689190612c40565b60405163a7bdad0360e01b81529091506000906060906001600160a01b038e169063a7bdad0390611b9d908790600401612d12565b60006040518083038186803b158015611bb557600080fd5b505afa158015611bc9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bf19190810190612972565b805190915015611cda5760005b8151811015611cd85760008e6001600160a01b03166322ebeba487858581518110611c2557fe5b60200260200101516040518363ffffffff1660e01b8152600401611c4a929190612d3f565b60206040518083038186803b158015611c6257600080fd5b505afa158015611c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9a9190612c40565b90506000811315611cbc57611cb5858263ffffffff61237916565b9450611ccf565b611ccc848263ffffffff61237916565b93505b50600101611bfe565b505b611ce3836123bf565b878681518110611cef57fe5b6020908102919091010152611d14611d0f8360001963ffffffff6123e516565b6123bf565b868681518110611d2057fe5b6020908102919091010152505060019092019150611ac99050565b5092979096509194509092505050565b6000821580611d58575081155b15611d65575060006105bc565b6115f76001611d96670de0b6b3a76400006115eb83611d8a898963ffffffff61223c16565b9063ffffffff6115fe16565b9063ffffffff61164016565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90611dd3908590600401612d12565b60206040518083038186803b158015611deb57600080fd5b505afa158015611dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e239190612a1d565b80156105bc57506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c90611e56903090600401612d12565b60206040518083038186803b158015611e6e57600080fd5b505afa158015611e82573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc9190612a1d565b60405163a7bdad0360e01b81526060906001600160a01b0387169063a7bdad0390611ed5908790600401612d12565b60006040518083038186803b158015611eed57600080fd5b505afa158015611f01573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f299190810190612972565b80519091508315611fc85760005b81811015611fc257828181518110611f4b57fe5b60200260200101516001600160a01b0316630fb96b21898989886040518563ffffffff1660e01b8152600401611f849493929190612e53565b600060405180830381600087803b158015611f9e57600080fd5b505af1158015611fb2573d6000803e3d6000fd5b505060019092019150611f379050565b50611291565b60005b8181101561205657828181518110611fdf57fe5b60200260200101516001600160a01b031663c137f4d7898989886040518563ffffffff1660e01b81526004016120189493929190612e53565b600060405180830381600087803b15801561203257600080fd5b505af1158015612046573d6000803e3d6000fd5b505060019092019150611fcb9050565b5050505050505050565b8015611147576040516370a0823160e01b81526000906001600160a01b038516906370a0823190612095908890600401612d12565b60206040518083038186803b1580156120ad57600080fd5b505afa1580156120c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e59190612c40565b90506120f385858585612450565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190612122908990600401612d12565b60206040518083038186803b15801561213a57600080fd5b505afa15801561214e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121729190612c40565b9050612184828463ffffffff6115fe16565b81146111eb5760405162461bcd60e51b815260040161034d90613257565b6111478484848461251d565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b1580156121f357600080fd5b505afa158015612207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222b9190612956565b6001600160a01b0316149392505050565b60008261224b575060006105bc565b8282028284828161225857fe5b04146115f75760405162461bcd60e51b815260040161034d9061315e565b60006115f783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612641565b600081848411156122dc5760405162461bcd60e51b815260040161034d9190612e7d565b505050900390565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f790611e56903090600401612d12565b81516000908190815b8181101561236657846001600160a01b031686828151811061233a57fe5b60200260200101516001600160a01b0316141561235e579250600191506123729050565b60010161231c565b50600019600092509250505b9250929050565b600082820181831280159061238e5750838112155b806123a357506000831280156123a357508381125b6115f75760405162461bcd60e51b815260040161034d906130b1565b6000808212156123e15760405162461bcd60e51b815260040161034d906130f2565b5090565b6000826123f4575060006105bc565b826000191480156124085750600160ff1b82145b156124255760405162461bcd60e51b815260040161034d906131ce565b8282028284828161243257fe5b05146115f75760405162461bcd60e51b815260040161034d906131ce565b8015611147576060828260405160240161246b929190612d26565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f0332906124c79087906000908690600401612d7d565b600060405180830381600087803b1580156124e157600080fd5b505af11580156124f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111eb9190810190612a39565b8015611147576040516370a0823160e01b81526000906001600160a01b038616906370a0823190612552908690600401612d12565b60206040518083038186803b15801561256a57600080fd5b505afa15801561257e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a29190612c40565b90506125b085858585612678565b6040516370a0823160e01b81526000906001600160a01b038716906370a08231906125df908790600401612d12565b60206040518083038186803b1580156125f757600080fd5b505afa15801561260b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262f9190612c40565b9050612184828463ffffffff61164016565b600081836126625760405162461bcd60e51b815260040161034d9190612e7d565b50600083858161266e57fe5b0495945050505050565b611147846323b872dd60e01b85858560405160240161269993929190612d59565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526060612720826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661275a9092919063ffffffff16565b805190915015611400578080602001905181019061273e9190612a1d565b6114005760405162461bcd60e51b815260040161034d90613438565b60606114c484846000858561276e85612804565b61278a5760405162461bcd60e51b815260040161034d9061330c565b60006060866001600160a01b031685876040516127a79190612cf6565b60006040518083038185875af1925050503d80600081146127e4576040519150601f19603f3d011682016040523d82523d6000602084013e6127e9565b606091505b50915091506127f982828661280a565b979650505050505050565b3b151590565b606083156128195750816115f7565b8251156128295782518084602001fd5b8160405162461bcd60e51b815260040161034d9190612e7d565b5080546000825590600052602060002090810190611043919061290a565b6040518060c0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b8280548282559060005260206000209081019282156128fe579160200282015b828111156128fe57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906128c9565b506123e1929150612927565b61292491905b808211156123e15760008155600101612910565b90565b61292491905b808211156123e15780546001600160a01b031916815560010161292d565b80516105bc816135e0565b600060208284031215612967578081fd5b81516115f7816135e0565b60006020808385031215612984578182fd5b825167ffffffffffffffff8082111561299b578384fd5b81850186601f8201126129ac578485fd5b80519250818311156129bc578485fd5b83830291506129cc84830161358d565b8381528481019082860184840187018a10156129e6578788fd5b8794505b85851015612a10576129fc8a8261294b565b8352600194909401939186019186016129ea565b5098975050505050505050565b600060208284031215612a2e578081fd5b81516115f7816135f5565b600060208284031215612a4a578081fd5b815167ffffffffffffffff80821115612a61578283fd5b81840185601f820112612a72578384fd5b8051925081831115612a82578384fd5b612a95601f8401601f191660200161358d565b9150828252856020848301011115612aab578384fd5b612abc8360208401602084016135b4565b50949350505050565b600060208284031215612ad6578081fd5b81356115f7816135e0565b60008060408385031215612af3578081fd5b8235612afe816135e0565b91506020830135612b0e816135e0565b809150509250929050565b60008060408385031215612b2b578182fd5b8235612b36816135e0565b946020939093013593505050565b600080600060608486031215612b58578081fd5b8335612b63816135e0565b9250602084013591506040840135612b7a816135e0565b809150509250925092565b600080600060608486031215612b99578283fd5b8335612ba4816135e0565b9250602084013591506040840135612b7a816135f5565b60008060008060008060c08789031215612bd3578182fd5b8635612bde816135e0565b95506020870135945060408701359350606087013592506080870135612c03816135e0565b915060a0870135612c13816135e0565b809150509295509295509295565b600060208284031215612c32578081fd5b8151600381106115f7578182fd5b600060208284031215612c51578081fd5b5051919050565b6000815180845260208085019450808401835b83811015612c905781516001600160a01b031687529582019590820190600101612c6b565b509495945050505050565b6000815180845260208085019450808401835b83811015612c9057815187529582019590820190600101612cae565b60008151808452612ce28160208601602086016135b4565b601f01601f19169290920160200192915050565b60008251612d088184602087016135b4565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060018060a01b038516825283602083015260606040830152612da46060830184612cca565b95945050505050565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6000602082526115f76020830184612c58565b600060608252612df96060830186612c58565b8281036020840152612e0b8186612c9b565b83810360408501526127f98186612c9b565b901515815260200190565b6001600160a01b03948516815260208101939093529083166040830152909116606082015260800190565b6001600160a01b039485168152602081019390935292166040820152901515606082015260800190565b6000602082526115f76020830184612cca565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b6020808252601f908201527f52656465656d206665652063616e277420657863656564206d6178696d756d00604082015260600190565b60208082526016908201527514d85b59481c995919595b48199959481c185cdcd95960521b604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b60208082526016908201527526b7b23ab632903737ba103932b3b4b9ba32b932b21760511b604082015260600190565b6020808252601b908201527f52656465656d207175616e74697479206d757374206265203e20300000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b6020808252601e908201527f4973737565206665652063616e277420657863656564206d6178696d756d0000604082015260600190565b6020808252601a908201527f4973737565207175616e74697479206d757374206265203e2030000000000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526015908201527414d85b59481a5cdcdd5948199959481c185cdcd959605a1b604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526022908201527f4973737565206665652063616e277420657863656564206d6178696d756d2066604082015261656560f01b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b60208082526019908201527f53616d652066656520726563697069656e742070617373656400000000000000604082015260600190565b60208082526027908201527f46656520526563697069656e74206d757374206265206e6f6e2d7a65726f206160408201526632323932b9b99760c91b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252601a908201527f4d6f64756c6520616c726561647920726567697374657265642e000000000000604082015260600190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526023908201527f52656769737465726564206d6f64756c6573206d7573742062652072656d6f7660408201526232b21760e91b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526023908201527f52656465656d206665652063616e277420657863656564206d6178696d756d2060408201526266656560e81b606082015260800190565b90815260200190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526001600160a01b03908116606084015216608082015260a00190565b60405181810167ffffffffffffffff811182821017156135ac57600080fd5b604052919050565b60005b838110156135cf5781810151838201526020016135b7565b838111156111475750506000910152565b6001600160a01b038116811461104357600080fd5b801515811461104357600080fdfea26469706673582212207cd413d1d9143d6f05e451bd6f6b824be46f61b36fbbd9c550702573ace646ed64736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063847ef08d11610097578063cd3c753911610066578063cd3c753914610221578063d9b1b6e014610245578063e079962014610258578063f77c47911461026b57610100565b8063847ef08d146101d15780638dda4037146101d9578063bf9fe138146101fb578063cb38b2231461020e57610100565b806363082446116100d357806363082446146101785780636b8e53b6146101985780636d78f47a146101ab5780636dd86aa9146101be57610100565b806308bc0e1114610105578063131e26b91461012e5780635c833bfd146101505780635d98c37314610165575b600080fd5b610118610113366004612ac5565b610280565b6040516101259190612dd3565b60405180910390f35b61014161013c366004612b19565b6102f9565b60405161012593929190612de6565b61016361015e366004612b44565b61032a565b005b610163610173366004612ae1565b6104ae565b61018b610186366004612ae1565b61058e565b6040516101259190612e1d565b6101416101a6366004612b19565b6105c2565b6101636101b9366004612b44565b6105e5565b6101636101cc366004612b19565b610773565b61016361083f565b6101ec6101e7366004612b85565b6108c2565b60405161012593929190613548565b610163610209366004612bbb565b610a98565b61016361021c366004612b19565b610c1b565b61023461022f366004612ac5565b610ce6565b60405161012595949392919061355e565b610163610253366004612ac5565b610d22565b610163610266366004612ac5565b610dda565b610273610e90565b6040516101259190612d12565b6001600160a01b0381166000908152600260209081526040918290206005018054835181840281018401909452808452606093928301828280156102ed57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102cf575b50505050509050919050565b6060806060600061030c868660016108c2565b5050905061031c86826001610e9f565b935093509350509250925092565b600260015414156103565760405162461bcd60e51b815260040161034d906134c5565b60405180910390fd5b6002600155826103658161101e565b600083116103855760405162461bcd60e51b815260040161034d90612f9e565b61038f8484611046565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac906103bd9033908790600401612d26565b600060405180830381600087803b1580156103d757600080fd5b505af11580156103eb573d6000803e3d6000fd5b505050506000806000610400878760006108c2565b92509250925060608060606104178a876000610e9f565b92509250925061042b8a876000868561114d565b61043a8a878a600087876111f3565b6104458a868661129a565b876001600160a01b0316336001600160a01b03168b6001600160a01b03167f54f4ed50e49638053e1655b45ee7ece434edd150e6771ac0aaedb8355be13a338c898960405161049693929190613548565b60405180910390a45050600180555050505050505050565b816104b881611405565b6001600160a01b0382166104de5760405162461bcd60e51b815260040161034d906132c5565b6001600160a01b038084166000908152600260205260409020600301548382169116141561051e5760405162461bcd60e51b815260040161034d9061328e565b6001600160a01b038381166000818152600260205260409081902060030180546001600160a01b0319169386169390931790925590517faaebcf1bfa00580e41d966056b48521fa9f202645c86d4ddf28113e617c1b1d390610581908590612d12565b60405180910390a2505050565b6001600160a01b038083166000908152600260209081526040808320938516835260069093019052205460ff165b92915050565b606080606060006105d5868660006108c2565b5050905061031c86826000610e9f565b600260015414156106085760405162461bcd60e51b815260040161034d906134c5565b6002600155826106178161101e565b600083116106375760405162461bcd60e51b815260040161034d9061307a565b60006106458585338661142b565b905061065185856114cc565b6000806000610662888860016108c2565b92509250925060608060606106798b876001610e9f565b92509250925061068e8b878b600187876111f3565b61069c8b876001868561114d565b6106a78b868661129a565b6040516340c10f1960e01b81526001600160a01b038c16906340c10f19906106d5908c908e90600401612d26565b600060405180830381600087803b1580156106ef57600080fd5b505af1158015610703573d6000803e3d6000fd5b50505050886001600160a01b0316336001600160a01b03168c6001600160a01b03167f1abc43bc3dd8b6c8bb9bcf1a14a84f83981bf5335700ef07758efefcb03a8c758a8e8a8a60405161075a9493929190612dad565b60405180910390a4505060018055505050505050505050565b8161077d81611405565b6001600160a01b0383166000908152600260205260409020548211156107b55760405162461bcd60e51b815260040161034d90612ebf565b6001600160a01b038316600090815260026020819052604090912001548214156107f15760405162461bcd60e51b815260040161034d90612ef6565b6001600160a01b03831660008181526002602081905260409182902001849055517f676eda176d6aa20e9aa09b9ee131487c90646cd2b951176f75bd6fccdc0261779061058190859061353f565b336000908152600260205260409020600501541561086f5760405162461bcd60e51b815260040161034d90613482565b3360009081526002602081905260408220828155600181018390559081018290556003810180546001600160a01b03199081169091556004820180549091169055906108be6005830182612843565b5050565b60008060006108cf612861565b6001600160a01b03808816600090815260026020818152604092839020835160c0810185528154815260018201548184015292810154838501526003810154851660608401526004810154909416608083015260058401805484518184028101840190955280855292949360a0860193909283018282801561097a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161095c575b5050509190925250506000805460405163792aa04f60e01b815293945090926001600160a01b03909116915063792aa04f906109bc9030908590600401612d26565b60206040518083038186803b1580156109d457600080fd5b505afa1580156109e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0c9190612c40565b9050600086610a1f578260400151610a25565b82602001515b90506000610a39828a63ffffffff6115cd16565b9050610a4b818463ffffffff6115cd16565b9450610a5d818663ffffffff6115fe16565b955087610a7957610a74898263ffffffff6115fe16565b610a89565b610a89898263ffffffff61164016565b96505050505093509350939050565b8533610aa48282611665565b87610aae8161168b565b87871115610ace5760405162461bcd60e51b815260040161034d90613215565b87861115610aee5760405162461bcd60e51b815260040161034d906134fc565b6040805160c08101825289815260208082018a90528183018990526001600160a01b0388811660608401528716608083015282516000808252918101909352909160a08301915090526001600160a01b03808b1660009081526002602081815260409283902085518155858201516001820155928501519183019190915560608401516003830180549185166001600160a01b031992831617905560808501516004840180549190951691161790925560a083015180519192610bb9926005850192909101906128a9565b50905050886001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bf857600080fd5b505af1158015610c0c573d6000803e3d6000fd5b50505050505050505050505050565b81610c2581611405565b6001600160a01b038316600090815260026020526040902054821115610c5d5760405162461bcd60e51b815260040161034d90613043565b6001600160a01b038316600090815260026020526040902060010154821415610c985760405162461bcd60e51b815260040161034d9061319f565b6001600160a01b03831660008181526002602052604090819020600101849055517fd1de57b1db6a29967f337d6f744b7811624dabf2be924c65708336a81678d0779061058190859061353f565b60026020819052600091825260409091208054600182015492820154600383015460049093015491939290916001600160a01b03918216911685565b80610d2c8161174c565b81610d368161101e565b6001600160a01b038316600090815260026020908152604080832033845260060190915290205460ff1615610d7d5760405162461bcd60e51b815260040161034d90613343565b50506001600160a01b03166000908152600260209081526040808320600581018054600181810183559186528486200180546001600160a01b0319163390811790915585526006909101909252909120805460ff19169091179055565b80610de48161174c565b81610dee8161101e565b6001600160a01b038316600090815260026020908152604080832033845260060190915290205460ff16610e345760405162461bcd60e51b815260040161034d90612f6e565b6001600160a01b0383166000908152600260205260409020610e5f906005013363ffffffff61188e16565b50506001600160a01b031660009081526002602090815260408083203384526006019091529020805460ff19169055565b6000546001600160a01b031681565b606080606080606080610eb1896119ba565b8251929550909350915060608167ffffffffffffffff81118015610ed457600080fd5b50604051908082528060200260200182016040528015610efe578160200160208202803683370190505b50905060608267ffffffffffffffff81118015610f1a57600080fd5b50604051908082528060200260200182016040528015610f44578160200160208202803683370190505b50905060005b865181101561100a578a610f8357610f7e8c878381518110610f6857fe5b60200260200101516115cd90919063ffffffff16565b610fa9565b610fa98c878381518110610f9357fe5b6020026020010151611d4b90919063ffffffff16565b838281518110610fb557fe5b6020026020010181815250508a610fdb57610fd68c868381518110610f9357fe5b610feb565b610feb8c868381518110610f6857fe5b828281518110610ff757fe5b6020908102919091010152600101610f4a565b50949b909a50939850929650505050505050565b61102781611da2565b6110435760405162461bcd60e51b815260040161034d90612f26565b50565b6001600160a01b0382166000908152600260209081526040918290206005018054835181840281018401909452808452606093928301828280156110b357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611095575b50939450600093505050505b8151811015611147578181815181106110d457fe5b60200260200101516001600160a01b0316633fe6106b85856040518363ffffffff1660e01b8152600401611109929190612d26565b600060405180830381600087803b15801561112357600080fd5b505af1158015611137573d6000803e3d6000fd5b5050600190920191506110bf9050565b50505050565b60005b82518110156111eb57600083828151811061116757fe5b60200260200101519050600083838151811061117f57fe5b6020026020010151905060008111156111e15785156111c7576111a788888460016000611ea6565b6111c26001600160a01b03891683338463ffffffff61206016565b6111e1565b6111d382338a846121a2565b6111e1888884600080611ea6565b5050600101611150565b505050505050565b60005b825181101561129157600083828151811061120d57fe5b60200260200101519050600083838151811061122557fe5b60200260200101519050600081111561128757851561125d5761124a82338b846121a2565b611258898984600180611ea6565b611287565b61126c89898460006001611ea6565b6112876001600160a01b038a1683898463ffffffff61206016565b50506001016111f6565b50505050505050565b8115611400576001600160a01b03808416600081815260026020526040908190206003015490516340c10f1960e01b815291926340c10f19926112e592909116908690600401612d26565b600060405180830381600087803b1580156112ff57600080fd5b505af1158015611313573d6000803e3d6000fd5b50505050600081111561140057826001600160a01b03166340c10f196000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b15801561137c57600080fd5b505afa158015611390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b49190612956565b836040518363ffffffff1660e01b81526004016113d2929190612d26565b600060405180830381600087803b1580156113ec57600080fd5b505af1158015611291573d6000803e3d6000fd5b505050565b61140f81336121ae565b61101e5760405162461bcd60e51b815260040161034d90613401565b6001600160a01b0380851660009081526002602052604081206004015490911680156114be5760405163a045808360e01b81526001600160a01b0382169063a045808390611483908990899089908990600401612e28565b600060405180830381600087803b15801561149d57600080fd5b505af11580156114b1573d6000803e3d6000fd5b50505050809150506114c4565b60009150505b949350505050565b6001600160a01b03821660009081526002602090815260409182902060050180548351818402810184019094528084526060939283018282801561153957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161151b575b50939450600093505050505b81518110156111475781818151811061155a57fe5b60200260200101516001600160a01b031663c153dd0785856040518363ffffffff1660e01b815260040161158f929190612d26565b600060405180830381600087803b1580156115a957600080fd5b505af11580156115bd573d6000803e3d6000fd5b5050600190920191506115459050565b60006115f7670de0b6b3a76400006115eb858563ffffffff61223c16565b9063ffffffff61227616565b9392505050565b60006115f783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122b8565b6000828201838110156115f75760405162461bcd60e51b815260040161034d90612fd5565b61166f82826121ae565b6108be5760405162461bcd60e51b815260040161034d90613401565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906116bb908490600401612d12565b60206040518083038186803b1580156116d357600080fd5b505afa1580156116e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170b9190612a1d565b6117275760405162461bcd60e51b815260040161034d906133be565b611730816122e4565b6110435760405162461bcd60e51b815260040161034d9061300c565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e529061177a903390600401612d12565b60206040518083038186803b15801561179257600080fd5b505afa1580156117a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ca9190612c21565b60028111156117d557fe5b146117f25760405162461bcd60e51b815260040161034d90613127565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e38990611822903390600401612d12565b60206040518083038186803b15801561183a57600080fd5b505afa15801561184e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118729190612a1d565b6110435760405162461bcd60e51b815260040161034d9061337a565b6000806118f4848054806020026020016040519081016040528092919081815260200182805480156118e957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116118cb575b505050505084612313565b91509150806119155760405162461bcd60e51b815260040161034d90612e90565b8354600019018281146119875784818154811061192e57fe5b9060005260206000200160009054906101000a90046001600160a01b031685848154811061195857fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8480548061199157fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b606080606080846001600160a01b03166399d50d5d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156119f957600080fd5b505afa158015611a0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a359190810190612972565b805190915060608167ffffffffffffffff81118015611a5357600080fd5b50604051908082528060200260200182016040528015611a7d578160200160208202803683370190505b50905060608267ffffffffffffffff81118015611a9957600080fd5b50604051908082528060200260200182016040528015611ac3578160200160208202803683370190505b50905060005b8451811015611d3b576000858281518110611ae057fe5b6020026020010151905060008a6001600160a01b03166366cb8d2f836040518263ffffffff1660e01b8152600401611b189190612d12565b60206040518083038186803b158015611b3057600080fd5b505afa158015611b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b689190612c40565b60405163a7bdad0360e01b81529091506000906060906001600160a01b038e169063a7bdad0390611b9d908790600401612d12565b60006040518083038186803b158015611bb557600080fd5b505afa158015611bc9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bf19190810190612972565b805190915015611cda5760005b8151811015611cd85760008e6001600160a01b03166322ebeba487858581518110611c2557fe5b60200260200101516040518363ffffffff1660e01b8152600401611c4a929190612d3f565b60206040518083038186803b158015611c6257600080fd5b505afa158015611c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9a9190612c40565b90506000811315611cbc57611cb5858263ffffffff61237916565b9450611ccf565b611ccc848263ffffffff61237916565b93505b50600101611bfe565b505b611ce3836123bf565b878681518110611cef57fe5b6020908102919091010152611d14611d0f8360001963ffffffff6123e516565b6123bf565b868681518110611d2057fe5b6020908102919091010152505060019092019150611ac99050565b5092979096509194509092505050565b6000821580611d58575081155b15611d65575060006105bc565b6115f76001611d96670de0b6b3a76400006115eb83611d8a898963ffffffff61223c16565b9063ffffffff6115fe16565b9063ffffffff61164016565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90611dd3908590600401612d12565b60206040518083038186803b158015611deb57600080fd5b505afa158015611dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e239190612a1d565b80156105bc57506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c90611e56903090600401612d12565b60206040518083038186803b158015611e6e57600080fd5b505afa158015611e82573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc9190612a1d565b60405163a7bdad0360e01b81526060906001600160a01b0387169063a7bdad0390611ed5908790600401612d12565b60006040518083038186803b158015611eed57600080fd5b505afa158015611f01573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f299190810190612972565b80519091508315611fc85760005b81811015611fc257828181518110611f4b57fe5b60200260200101516001600160a01b0316630fb96b21898989886040518563ffffffff1660e01b8152600401611f849493929190612e53565b600060405180830381600087803b158015611f9e57600080fd5b505af1158015611fb2573d6000803e3d6000fd5b505060019092019150611f379050565b50611291565b60005b8181101561205657828181518110611fdf57fe5b60200260200101516001600160a01b031663c137f4d7898989886040518563ffffffff1660e01b81526004016120189493929190612e53565b600060405180830381600087803b15801561203257600080fd5b505af1158015612046573d6000803e3d6000fd5b505060019092019150611fcb9050565b5050505050505050565b8015611147576040516370a0823160e01b81526000906001600160a01b038516906370a0823190612095908890600401612d12565b60206040518083038186803b1580156120ad57600080fd5b505afa1580156120c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e59190612c40565b90506120f385858585612450565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190612122908990600401612d12565b60206040518083038186803b15801561213a57600080fd5b505afa15801561214e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121729190612c40565b9050612184828463ffffffff6115fe16565b81146111eb5760405162461bcd60e51b815260040161034d90613257565b6111478484848461251d565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b1580156121f357600080fd5b505afa158015612207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222b9190612956565b6001600160a01b0316149392505050565b60008261224b575060006105bc565b8282028284828161225857fe5b04146115f75760405162461bcd60e51b815260040161034d9061315e565b60006115f783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612641565b600081848411156122dc5760405162461bcd60e51b815260040161034d9190612e7d565b505050900390565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f790611e56903090600401612d12565b81516000908190815b8181101561236657846001600160a01b031686828151811061233a57fe5b60200260200101516001600160a01b0316141561235e579250600191506123729050565b60010161231c565b50600019600092509250505b9250929050565b600082820181831280159061238e5750838112155b806123a357506000831280156123a357508381125b6115f75760405162461bcd60e51b815260040161034d906130b1565b6000808212156123e15760405162461bcd60e51b815260040161034d906130f2565b5090565b6000826123f4575060006105bc565b826000191480156124085750600160ff1b82145b156124255760405162461bcd60e51b815260040161034d906131ce565b8282028284828161243257fe5b05146115f75760405162461bcd60e51b815260040161034d906131ce565b8015611147576060828260405160240161246b929190612d26565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f0332906124c79087906000908690600401612d7d565b600060405180830381600087803b1580156124e157600080fd5b505af11580156124f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111eb9190810190612a39565b8015611147576040516370a0823160e01b81526000906001600160a01b038616906370a0823190612552908690600401612d12565b60206040518083038186803b15801561256a57600080fd5b505afa15801561257e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a29190612c40565b90506125b085858585612678565b6040516370a0823160e01b81526000906001600160a01b038716906370a08231906125df908790600401612d12565b60206040518083038186803b1580156125f757600080fd5b505afa15801561260b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262f9190612c40565b9050612184828463ffffffff61164016565b600081836126625760405162461bcd60e51b815260040161034d9190612e7d565b50600083858161266e57fe5b0495945050505050565b611147846323b872dd60e01b85858560405160240161269993929190612d59565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526060612720826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661275a9092919063ffffffff16565b805190915015611400578080602001905181019061273e9190612a1d565b6114005760405162461bcd60e51b815260040161034d90613438565b60606114c484846000858561276e85612804565b61278a5760405162461bcd60e51b815260040161034d9061330c565b60006060866001600160a01b031685876040516127a79190612cf6565b60006040518083038185875af1925050503d80600081146127e4576040519150601f19603f3d011682016040523d82523d6000602084013e6127e9565b606091505b50915091506127f982828661280a565b979650505050505050565b3b151590565b606083156128195750816115f7565b8251156128295782518084602001fd5b8160405162461bcd60e51b815260040161034d9190612e7d565b5080546000825590600052602060002090810190611043919061290a565b6040518060c0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b8280548282559060005260206000209081019282156128fe579160200282015b828111156128fe57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906128c9565b506123e1929150612927565b61292491905b808211156123e15760008155600101612910565b90565b61292491905b808211156123e15780546001600160a01b031916815560010161292d565b80516105bc816135e0565b600060208284031215612967578081fd5b81516115f7816135e0565b60006020808385031215612984578182fd5b825167ffffffffffffffff8082111561299b578384fd5b81850186601f8201126129ac578485fd5b80519250818311156129bc578485fd5b83830291506129cc84830161358d565b8381528481019082860184840187018a10156129e6578788fd5b8794505b85851015612a10576129fc8a8261294b565b8352600194909401939186019186016129ea565b5098975050505050505050565b600060208284031215612a2e578081fd5b81516115f7816135f5565b600060208284031215612a4a578081fd5b815167ffffffffffffffff80821115612a61578283fd5b81840185601f820112612a72578384fd5b8051925081831115612a82578384fd5b612a95601f8401601f191660200161358d565b9150828252856020848301011115612aab578384fd5b612abc8360208401602084016135b4565b50949350505050565b600060208284031215612ad6578081fd5b81356115f7816135e0565b60008060408385031215612af3578081fd5b8235612afe816135e0565b91506020830135612b0e816135e0565b809150509250929050565b60008060408385031215612b2b578182fd5b8235612b36816135e0565b946020939093013593505050565b600080600060608486031215612b58578081fd5b8335612b63816135e0565b9250602084013591506040840135612b7a816135e0565b809150509250925092565b600080600060608486031215612b99578283fd5b8335612ba4816135e0565b9250602084013591506040840135612b7a816135f5565b60008060008060008060c08789031215612bd3578182fd5b8635612bde816135e0565b95506020870135945060408701359350606087013592506080870135612c03816135e0565b915060a0870135612c13816135e0565b809150509295509295509295565b600060208284031215612c32578081fd5b8151600381106115f7578182fd5b600060208284031215612c51578081fd5b5051919050565b6000815180845260208085019450808401835b83811015612c905781516001600160a01b031687529582019590820190600101612c6b565b509495945050505050565b6000815180845260208085019450808401835b83811015612c9057815187529582019590820190600101612cae565b60008151808452612ce28160208601602086016135b4565b601f01601f19169290920160200192915050565b60008251612d088184602087016135b4565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060018060a01b038516825283602083015260606040830152612da46060830184612cca565b95945050505050565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6000602082526115f76020830184612c58565b600060608252612df96060830186612c58565b8281036020840152612e0b8186612c9b565b83810360408501526127f98186612c9b565b901515815260200190565b6001600160a01b03948516815260208101939093529083166040830152909116606082015260800190565b6001600160a01b039485168152602081019390935292166040820152901515606082015260800190565b6000602082526115f76020830184612cca565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b6020808252601f908201527f52656465656d206665652063616e277420657863656564206d6178696d756d00604082015260600190565b60208082526016908201527514d85b59481c995919595b48199959481c185cdcd95960521b604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b60208082526016908201527526b7b23ab632903737ba103932b3b4b9ba32b932b21760511b604082015260600190565b6020808252601b908201527f52656465656d207175616e74697479206d757374206265203e20300000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b6020808252601e908201527f4973737565206665652063616e277420657863656564206d6178696d756d0000604082015260600190565b6020808252601a908201527f4973737565207175616e74697479206d757374206265203e2030000000000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526015908201527414d85b59481a5cdcdd5948199959481c185cdcd959605a1b604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526022908201527f4973737565206665652063616e277420657863656564206d6178696d756d2066604082015261656560f01b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b60208082526019908201527f53616d652066656520726563697069656e742070617373656400000000000000604082015260600190565b60208082526027908201527f46656520526563697069656e74206d757374206265206e6f6e2d7a65726f206160408201526632323932b9b99760c91b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252601a908201527f4d6f64756c6520616c726561647920726567697374657265642e000000000000604082015260600190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526023908201527f52656769737465726564206d6f64756c6573206d7573742062652072656d6f7660408201526232b21760e91b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526023908201527f52656465656d206665652063616e277420657863656564206d6178696d756d2060408201526266656560e81b606082015260800190565b90815260200190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526001600160a01b03908116606084015216608082015260a00190565b60405181810167ffffffffffffffff811182821017156135ac57600080fd5b604052919050565b60005b838110156135cf5781810151838201526020016135b7565b838111156111475750506000910152565b6001600160a01b038116811461104357600080fd5b801515811461104357600080fdfea26469706673582212207cd413d1d9143d6f05e451bd6f6b824be46f61b36fbbd9c550702573ace646ed64736f6c634300060a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
