{
  "_format": "hh-sol-artifact-1",
  "contractName": "PerpV2LeverageModuleV2",
  "sourceName": "contracts/protocol/modules/v2/PerpV2LeverageModuleV2.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IController",
          "name": "_controller",
          "type": "address"
        },
        {
          "internalType": "contract IVault",
          "name": "_perpVault",
          "type": "address"
        },
        {
          "internalType": "contract IQuoter",
          "name": "_perpQuoter",
          "type": "address"
        },
        {
          "internalType": "contract IMarketRegistry",
          "name": "_perpMarketRegistry",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_maxPerpPositionsPerSet",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bool",
          "name": "_anySetAllowed",
          "type": "bool"
        }
      ],
      "name": "AnySetAllowedUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_collateralToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_amountDeposited",
          "type": "uint256"
        }
      ],
      "name": "CollateralDeposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_collateralToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_amountWithdrawn",
          "type": "uint256"
        }
      ],
      "name": "CollateralWithdrawn",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_baseToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_deltaBase",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_deltaQuote",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_protocolFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_isBuy",
          "type": "bool"
        }
      ],
      "name": "PerpTraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "_added",
          "type": "bool"
        }
      ],
      "name": "SetTokenStatusUpdated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowedSetTokens",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "anySetAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "collateralToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenQuantity",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_isEquity",
          "type": "bool"
        }
      ],
      "name": "componentIssueHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenQuantity",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_isEquity",
          "type": "bool"
        }
      ],
      "name": "componentRedeemHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "internalType": "contract IController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralQuantityUnits",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "getAccountInfo",
      "outputs": [
        {
          "components": [
            {
              "internalType": "int256",
              "name": "collateralBalance",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "owedRealizedPnl",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "pendingFundingPayments",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "netQuoteBalance",
              "type": "int256"
            }
          ],
          "internalType": "struct PerpV2LeverageModuleV2.AccountInfo",
          "name": "accountInfo",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenQuantity",
          "type": "uint256"
        }
      ],
      "name": "getIssuanceAdjustments",
      "outputs": [
        {
          "internalType": "int256[]",
          "name": "",
          "type": "int256[]"
        },
        {
          "internalType": "int256[]",
          "name": "",
          "type": "int256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "getPositionNotionalInfo",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "int256",
              "name": "baseBalance",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quoteBalance",
              "type": "int256"
            }
          ],
          "internalType": "struct PerpV2Positions.PositionNotionalInfo[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "getPositionUnitInfo",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "int256",
              "name": "baseUnit",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quoteUnit",
              "type": "int256"
            }
          ],
          "internalType": "struct PerpV2Positions.PositionUnitInfo[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenQuantity",
          "type": "uint256"
        }
      ],
      "name": "getRedemptionAdjustments",
      "outputs": [
        {
          "internalType": "int256[]",
          "name": "",
          "type": "int256[]"
        },
        {
          "internalType": "int256[]",
          "name": "_",
          "type": "int256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxPerpPositionsPerSet",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenQuantity",
          "type": "uint256"
        }
      ],
      "name": "moduleIssueHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenQuantity",
          "type": "uint256"
        }
      ],
      "name": "moduleRedeemHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "perpAccountBalance",
      "outputs": [
        {
          "internalType": "contract IAccountBalance",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "perpClearingHouse",
      "outputs": [
        {
          "internalType": "contract IClearingHouse",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "perpExchange",
      "outputs": [
        {
          "internalType": "contract IExchange",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "perpMarketRegistry",
      "outputs": [
        {
          "internalType": "contract IMarketRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "perpQuoter",
      "outputs": [
        {
          "internalType": "contract IQuoter",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "perpVault",
      "outputs": [
        {
          "internalType": "contract IVault",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IDebtIssuanceModule",
          "name": "_debtIssuanceModule",
          "type": "address"
        }
      ],
      "name": "registerToModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "removeModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_baseToken",
          "type": "address"
        },
        {
          "internalType": "int256",
          "name": "_baseQuantityUnits",
          "type": "int256"
        },
        {
          "internalType": "uint256",
          "name": "_quoteBoundQuantityUnits",
          "type": "uint256"
        }
      ],
      "name": "trade",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_status",
          "type": "bool"
        }
      ],
      "name": "updateAllowedSetToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_anySetAllowed",
          "type": "bool"
        }
      ],
      "name": "updateAnySetAllowed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxPerpPositionsPerSet",
          "type": "uint256"
        }
      ],
      "name": "updateMaxPerpPositionsPerSet",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralQuantityUnits",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101806040523480156200001257600080fd5b5060405162005461380380620054618339810160408190526200003591620003e0565b600080546001600160a01b0319166001600160a01b03871617815560018055859062000060620003b6565b600280546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600380546001600160a01b0319166001600160a01b03928316179055604080516312803c7d60e01b815290516000928716916312803c7d916004808301926020929190829003018186803b1580156200010657600080fd5b505afa1580156200011b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001419190620003ba565b9050806001600160a01b03166080816001600160a01b031660601b81525050806001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200019a57600080fd5b505afa158015620001af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d5919062000453565b60ff1660a08160ff1660f81b81525050846001600160a01b0316636896fabf6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021f57600080fd5b505afa15801562000234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025a9190620003ba565b6001600160a01b031660c0816001600160a01b031660601b81525050846001600160a01b031663c575ff796040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b057600080fd5b505afa158015620002c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002eb9190620003ba565b6001600160a01b031660e0816001600160a01b031660601b81525050846001600160a01b031663f807cd226040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034157600080fd5b505afa15801562000356573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037c9190620003ba565b6001600160601b0319606091821b81166101005295811b86166101205293841b85166101405250911b90911661016052600655506200048f565b3390565b600060208284031215620003cc578081fd5b8151620003d98162000476565b9392505050565b600080600080600060a08688031215620003f8578081fd5b8551620004058162000476565b6020870151909550620004188162000476565b60408701519094506200042b8162000476565b60608701519093506200043e8162000476565b80925050608086015190509295509295909350565b60006020828403121562000465578081fd5b815160ff81168114620003d9578182fd5b6001600160a01b03811681146200048c57600080fd5b50565b60805160601c60a05160f81c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c614e99620005c860003980611929528061252252508061134252806120c7525080610a5b5280610d605280611df25280611e575280612a2c52806134a1525080610dfe52806112f1525080610a375280610ae55280611013528061201a52508061042f5280610c905280610eee528061126d52806119e9528061263c528061371a525080610d3752806110ae52806121b352806121f85280612771528061341d528061348052508061061c52806106d352806107b2528061085f528061131e52806114dc5280611b405280611dd15280611e79528061228752806123da52806127ad5280612a4e5280612b905280612c515280612cd652806135285250614e996000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80639f71e2691161010f578063cb44f343116100a2578063f2fde38b11610071578063f2fde38b146103ec578063f3fef3a3146103ff578063f77c479114610412578063fc62d9fe1461041a576101f0565b8063cb44f34314610390578063d23cd56414610398578063da1cbb48146103b9578063ee78244f146103d9576101f0565b8063c137f4d7116100de578063c137f4d714610344578063c153dd0714610357578063c4d66de81461036a578063c690a74c1461037d576101f0565b80639f71e26914610317578063b1dd4d921461031f578063b2016bd414610334578063b2ad61d51461033c576101f0565b8063616516f2116101875780637b510fe8116101565780637b510fe8146102c7578063847ef08d146102e75780638da5cb5b146102ef57806395ba2006146102f7576101f0565b8063616516f21461029c5780636273010d146102a45780636aecef92146102ac578063715018a6146102bf576101f0565b80633fe6106b116101c35780633fe6106b1461025057806347e7ef24146102635780635199e418146102765780635b13651214610289576101f0565b80630b23207c146101f55780630fb96b211461021357806326b4fc48146102285780632ed804cd1461023d575b600080fd5b6101fd61042d565b60405161020a91906143d5565b60405180910390f35b61022661022136600461421f565b610451565b005b610230610515565b60405161020a9190614dac565b61022661024b3660046142d5565b61051b565b61022661025e3660046141f4565b61055e565b6102266102713660046141f4565b610738565b610226610284366004614086565b6108c7565b6102266102973660046141c7565b610939565b6101fd610a35565b6101fd610a59565b6102266102ba36600461414a565b610a7d565b610226610bef565b6102da6102d5366004613f1e565b610c6e565b60405161020a9190614d5b565b610226610f6f565b6101fd61120f565b61030a610305366004613f1e565b61121f565b60405161020a919061448c565b6101fd6112ef565b610327611313565b60405161020a919061451c565b6101fd61131c565b6101fd611340565b61022661035236600461421f565b611364565b6102266103653660046141f4565b61141e565b610226610378366004613f1e565b61156d565b61022661038b36600461418f565b6117df565b6101fd611927565b6103ab6103a63660046141f4565b61194b565b60405161020a929190614467565b6103cc6103c7366004613f1e565b61199b565b60405161020a91906144da565b6103276103e7366004613f1e565b611a11565b6102266103fa366004613f1e565b611a26565b61022661040d3660046141f4565b611add565b6101fd611ba8565b6103ab6104283660046141f4565b611bb7565b7f000000000000000000000000000000000000000000000000000000000000000081565b8361045b81611bed565b811561050e576040516308bafae960e21b81526000906001600160a01b038716906322ebeba49061049290879030906004016143e9565b60206040518083038186803b1580156104aa57600080fd5b505afa1580156104be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e29190614290565b905060006104ff6104f283611d32565b879063ffffffff611d5816565b905061050b8782611dc2565b50505b5050505050565b60065481565b610523611ed7565b6002546001600160a01b039081169116146105595760405162461bcd60e51b815260040161055090614940565b60405180910390fd5b600655565b8161056881611bed565b826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a157600080fd5b505afa1580156105b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d99190614290565b6105e257610733565b6040516303b9474360e41b815273__$13ece96e109ecca4127c3a43d4737092d3$__90633b94743090610644906001600160a01b038716907f0000000000000000000000000000000000000000000000000000000000000000906004016143e9565b60206040518083038186803b15801561065c57600080fd5b505af4158015610670573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069491906140a2565b61069d57610733565b60006106ac8484600080611edb565b6040516363a90fc160e01b81529091506001600160a01b038516906363a90fc1906106ff907f00000000000000000000000000000000000000000000000000000000000000009030908690600401614403565b600060405180830381600087803b15801561071957600080fd5b505af115801561072d573d6000803e3d6000fd5b50505050505b505050565b6002600154141561075b5760405162461bcd60e51b815260040161055090614cfa565b60026001558161076a81612237565b6000821161078a5760405162461bcd60e51b815260040161055090614a21565b6040516366cb8d2f60e01b815261082f906001600160a01b038516906366cb8d2f906107da907f0000000000000000000000000000000000000000000000000000000000000000906004016143d5565b60206040518083038186803b1580156107f257600080fd5b505afa158015610806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a9190614290565b611d32565b82111561084e5760405162461bcd60e51b8152600401610550906147c8565b600061085a8484612282565b9050807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03167ff1c0dd7e9b98bbff859029005ef89b127af049cd18df1a8d79f0b7e019911e5660405160405180910390a45050600180555050565b6108cf611ed7565b6002546001600160a01b039081169116146108fc5760405162461bcd60e51b815260040161055090614940565b6005805460ff19168215159081179091556040517f563e1633136cdd43b8793897cb53ba2a9e31c18b3ae0b6827fbbb03b9902e6c690600090a250565b8161094381612237565b6040516335fc6c9f60e21b81526001600160a01b0384169063d7f1b27c9061096f9085906004016143d5565b60206040518083038186803b15801561098757600080fd5b505afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf91906140a2565b6109db5760405162461bcd60e51b81526004016105509061489e565b6040516306cd8db760e51b81526001600160a01b0383169063d9b1b6e090610a079086906004016143d5565b600060405180830381600087803b158015610a2157600080fd5b505af115801561050b573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026001541415610aa05760405162461bcd60e51b815260040161055090614cfa565b600260015583610aaf81612237565b610ab7613d85565b610ac3868686866124e6565b905060008073__$37f46b63326be74363878a0a0fa6eea058$__63d4c2a2cd847f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401610b21929190614d86565b604080518083038186803b158015610b3857600080fd5b505af4158015610b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7091906142ed565b915091506000610b808983612759565b9050610b8c89896127d2565b82886001600160a01b03168a6001600160a01b03167f8b0c425c114ae7dafe6923dc427254a88c77c214b02e6b8436e08af3313e2ff585858960400151604051610bd893929190614db5565b60405180910390a450506001805550505050505050565b610bf7611ed7565b6002546001600160a01b03908116911614610c245760405162461bcd60e51b815260040161055090614940565b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b610c76613db3565b60405163bba85bcf60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bba85bcf90610cc59086906004016143d5565b60606040518083038186803b158015610cdd57600080fd5b505afa158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1591906142a8565b505060408051608081019182905263f8b2cb4f60e01b90915290915080610dee7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663f8b2cb4f610d9289608487016143d5565b60206040518083038186803b158015610daa57600080fd5b505afa158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de29190614290565b9063ffffffff61291916565b8152602001828152602001610e9d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166380f57f11876040518263ffffffff1660e01b8152600401610e4891906143d5565b60206040518083038186803b158015610e6057600080fd5b505afa158015610e74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e989190614290565b612934565b81526001600160a01b038516600090815260076020908152604091829020915163ef9f4b9f60e01b815292019173__$2aa9f85261a450f4a764d4c5a0e33a5378$__9163ef9f4b9f91610f169189917f000000000000000000000000000000000000000000000000000000000000000090600401614589565b60206040518083038186803b158015610f2e57600080fd5b505af4158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f669190614290565b90529392505050565b33610f798161225d565b600033905060006110a4610ffc836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbf57600080fd5b505afa158015610fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff79190614290565b612960565b604051635ae8095160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635ae80951906110489087906004016143d5565b60206040518083038186803b15801561106057600080fd5b505afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190614290565b9063ffffffff61298516565b905060016110d8827f000000000000000000000000000000000000000000000000000000000000000063ffffffff6129af16565b13156110f65760405162461bcd60e51b815260040161055090614c25565b6001600160a01b038216600090815260076020526040812061111791613ddb565b6060826001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b15801561115257600080fd5b505afa158015611166573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261118e9190810190613f56565b905060005b815181101561050e578181815181106111a857fe5b60200260200101516001600160a01b031663e0799620856040518263ffffffff1660e01b81526004016111db91906143d5565b600060405180830381600087803b1580156111f557600080fd5b505af1925050508015611206575060015b50600101611193565b6002546001600160a01b03165b90565b6001600160a01b038116600090815260076020526040908190209051634e1910b360e01b815260609173__$2aa9f85261a450f4a764d4c5a0e33a5378$__91634e1910b391611295918691907f000000000000000000000000000000000000000000000000000000000000000090600401614589565b60006040518083038186803b1580156112ad57600080fd5b505af41580156112c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112e99190810190614053565b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60055460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b8361136e81611bed565b811561050e576040516308bafae960e21b81526000906001600160a01b038716906322ebeba4906113a590879030906004016143e9565b60206040518083038186803b1580156113bd57600080fd5b505afa1580156113d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f59190614290565b9050600061141261140583611d32565b879063ffffffff6129ca16565b905061050b87826129e8565b8161142881611bed565b826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561146157600080fd5b505afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190614290565b6114a257610733565b6040516303b9474360e41b815273__$13ece96e109ecca4127c3a43d4737092d3$__90633b94743090611504906001600160a01b038716907f0000000000000000000000000000000000000000000000000000000000000000906004016143e9565b60206040518083038186803b15801561151c57600080fd5b505af4158015611530573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155491906140a2565b61155d57610733565b60006106ac848460016000611edb565b80336115798282612a7c565b8261158381612aa2565b600554849060ff166115c7576001600160a01b03811660009081526004602052604090205460ff166115c75760405162461bcd60e51b815260040161055090614975565b846001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561160257600080fd5b505af1158015611616573d6000803e3d6000fd5b50505050846001600160a01b031663d7f1b27c61165f6040518060400160405280601581526020017444656661756c7449737375616e63654d6f64756c6560581b815250612b63565b6040518263ffffffff1660e01b815260040161167b91906143d5565b60206040518083038186803b15801561169357600080fd5b505afa1580156116a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cb91906140a2565b6116e75760405162461bcd60e51b81526004016105509061489e565b6060856001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b15801561172257600080fd5b505afa158015611736573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261175e9190810190613f56565b905060005b815181101561050b5781818151811061177857fe5b60200260200101516001600160a01b031663d9b1b6e0886040518263ffffffff1660e01b81526004016117ab91906143d5565b600060405180830381600087803b1580156117c557600080fd5b505af19250505080156117d6575060015b50600101611763565b6117e7611ed7565b6002546001600160a01b039081169116146118145760405162461bcd60e51b815260040161055090614940565b600354604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906118449085906004016143d5565b60206040518083038186803b15801561185c57600080fd5b505afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189491906140a2565b806118b757506001600160a01b03821660009081526004602052604090205460ff165b6118d35760405162461bcd60e51b815260040161055090614916565b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f2035981b48691b10f6ac65174e570b4d0a8a889ae01bef3e5e7759ff9444f0c491a35050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0382166000908152600760205260408120546060918291611974576000611982565b611982858560006001611edb565b905061198e8582612b7a565b92509250505b9250929050565b6001600160a01b0381166000908152600760205260409081902090516322f1c36560e21b815260609173__$2aa9f85261a450f4a764d4c5a0e33a5378$__91638bc70d9491611295918691907f000000000000000000000000000000000000000000000000000000000000000090600401614589565b60046020526000908152604090205460ff1681565b611a2e611ed7565b6002546001600160a01b03908116911614611a5b5760405162461bcd60e51b815260040161055090614940565b6001600160a01b038116611a815760405162461bcd60e51b8152600401610550906146a4565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b60026001541415611b005760405162461bcd60e51b815260040161055090614cfa565b600260015581611b0f81612237565b60008211611b2f5760405162461bcd60e51b815260040161055090614aba565b6000611b3b8484612cd1565b9050807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03167f45892a46e6cef329bb642da6d69846d324db43d19008edc141ed82382eda1bee60405160405180910390a45050600180555050565b6000546001600160a01b031681565b6001600160a01b0382166000908152600760205260408120546060918291611be0576000611982565b6119828585600180611edb565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e5290611c1b9033906004016143d5565b60206040518083038186803b158015611c3357600080fd5b505afa158015611c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6b9190614271565b6002811115611c7657fe5b14611c935760405162461bcd60e51b815260040161055090614826565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e38990611cc39033906004016143d5565b60206040518083038186803b158015611cdb57600080fd5b505afa158015611cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1391906140a2565b611d2f5760405162461bcd60e51b815260040161055090614b67565b50565b600080821215611d545760405162461bcd60e51b8152600401610550906147f1565b5090565b6000821580611d65575081155b15611d72575060006112e9565b611dbb6001611daf670de0b6b3a7640000611da383611d97898963ffffffff612e0116565b9063ffffffff612e3b16565b9063ffffffff612e7d16565b9063ffffffff612ebf16565b9392505050565b611e1d6001600160a01b0383167f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008463ffffffff612ee416565b6040516305e190a960e21b815273__$37f46b63326be74363878a0a0fa6eea058$__9063178642a490611ea3906001600160a01b038616907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009087906004016145f0565b60006040518083038186803b158015611ebb57600080fd5b505af4158015611ecf573d6000803e3d6000fd5b505050505050565b3390565b6000611ee685612fab565b6000611ef185612960565b90506000611f0e82611f0289613082565b9063ffffffff61310d16565b90506060611f1b8861121f565b90506000815190506000611f618a6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbf57600080fd5b905060005b82811015612192576000611f9e87611f0285888681518110611f8457fe5b60200260200101516020015161298590919063ffffffff16565b9050611fa8613d85565b611fe08d878581518110611fb857fe5b6020026020010151600001518d611fd757611fd285612934565b611fd9565b845b600061312b565b905060008a6120965760405163d4c2a2cd60e01b815273__$37f46b63326be74363878a0a0fa6eea058$__9063d4c2a2cd906120429085907f000000000000000000000000000000000000000000000000000000000000000090600401614d86565b604080518083038186803b15801561205957600080fd5b505af415801561206d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209191906142ed565b61213e565b60405163740a93a760e11b815273__$37f46b63326be74363878a0a0fa6eea058$__9063e815274e906120ef9085907f000000000000000000000000000000000000000000000000000000000000000090600401614d86565b604080518083038186803b15801561210657600080fd5b505af415801561211a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213e91906142ed565b91505060008312156121685761216361215682612960565b899063ffffffff61317b16565b612181565b61218161217482612960565b899063ffffffff6131c116565b97505060019092019150611f669050565b50600084136121a95760009550505050505061222f565b876121f3576121ee7f00000000000000000000000000000000000000000000000000000000000000006121e2868863ffffffff61298516565b9063ffffffff6129af16565b612227565b6122277f00000000000000000000000000000000000000000000000000000000000000006121e2868863ffffffff61320716565b955050505050505b949350505050565b6122418133613284565b61225d5760405162461bcd60e51b815260040161055090614bee565b61226681613312565b611d2f5760405162461bcd60e51b81526004016105509061465c565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231856040518263ffffffff1660e01b81526004016122d191906143d5565b60206040518083038186803b1580156122e957600080fd5b505afa1580156122fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123219190614290565b905060006123a6856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561236157600080fd5b505afa158015612375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123999190614290565b859063ffffffff6129ca16565b90506123b28582611dc2565b846001600160a01b031673__$13ece96e109ecca4127c3a43d4737092d3$__63d4a56b7990917f0000000000000000000000000000000000000000000000000000000000000000886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561243257600080fd5b505afa158015612446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246a9190614290565b866040518563ffffffff1660e01b815260040161248a9493929190614560565b60606040518083038186803b1580156124a257600080fd5b505af41580156124b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124da91906142a8565b50505061222f85613416565b6124ee613d85565b8261250b5760405162461bcd60e51b815260040161055090614a4e565b604051631246dbf560e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631246dbf5906125579087906004016143d5565b60206040518083038186803b15801561256f57600080fd5b505afa158015612583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a791906140a2565b6125c35760405162461bcd60e51b815260040161055090614ae8565b6000856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125fe57600080fd5b505afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126369190614290565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b3bd6e1288886040518363ffffffff1660e01b81526004016126889291906143e9565b60206040518083038186803b1580156126a057600080fd5b505afa1580156126b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d89190614290565b905060006126f56126e884612960565b839063ffffffff61298516565b9050600061270282612934565b87146127265761272161271485612960565b889063ffffffff61310d16565b61272f565b61272f83612934565b905061274c8989836127478a8963ffffffff6129ca16565b61312b565b9998505050505050505050565b600080612767600084613554565b9050600061279b827f000000000000000000000000000000000000000000000000000000000000000063ffffffff6135e916565b90506127a785826129e8565b61222f857f000000000000000000000000000000000000000000000000000000000000000083613604565b6001600160a01b03821660009081526007602090815260409182902080548351818402810184019094528084526060939283018282801561283c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161281e575b50505050509050600061285883836136ab90919063ffffffff16565b9050801561289b5761286a84846136c1565b612896576001600160a01b0384166000908152600760205260409020612896908463ffffffff61376816565b612913565b6006546001600160a01b038516600090815260076020526040902054106128d45760405162461bcd60e51b815260040161055090614a73565b6001600160a01b0384811660009081526007602090815260408220805460018101825590835291200180546001600160a01b0319169185169190911790555b50505050565b6000611dbb8360ff8416601203600a0a63ffffffff61389416565b6000600160ff1b82136129595760405162461bcd60e51b815260040161055090614c55565b5060000390565b6000600160ff1b8210611d545760405162461bcd60e51b815260040161055090614b1f565b6000611dbb826129a385670de0b6b3a764000063ffffffff61389416565b9063ffffffff6138ff16565b6000611dbb8360ff8416601203600a0a63ffffffff6138ff16565b6000611dbb670de0b6b3a7640000611da3858563ffffffff612e0116565b806129f257612a78565b604051632ab3e8ef60e11b815273__$37f46b63326be74363878a0a0fa6eea058$__90635567d1de90611ea3906001600160a01b038616907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009087906004016145f0565b5050565b612a868282613284565b612a785760405162461bcd60e51b815260040161055090614bee565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90612ad29084906004016143d5565b60206040518083038186803b158015612aea57600080fd5b505afa158015612afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2291906140a2565b612b3e5760405162461bcd60e51b815260040161055090614bab565b612b4781613963565b611d2f5760405162461bcd60e51b815260040161055090614721565b600080612b6f83613992565b9050611dbb8161399d565b6060806000846001600160a01b03166322ebeba47f0000000000000000000000000000000000000000000000000000000000000000306040518363ffffffff1660e01b8152600401612bcd9291906143e9565b60206040518083038186803b158015612be557600080fd5b505afa158015612bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1d9190614290565b6040516304e381f560e31b815290915073__$2aa9f85261a450f4a764d4c5a0e33a5378$__9063271c0fa890612c7d9088907f00000000000000000000000000000000000000000000000000000000000000009086908a90600401614560565b60006040518083038186803b158015612c9557600080fd5b505af4158015612ca9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261198e9190810190613ff2565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231856040518263ffffffff1660e01b8152600401612d2091906143d5565b60206040518083038186803b158015612d3857600080fd5b505afa158015612d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d709190614290565b90506000612df5856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612db057600080fd5b505afa158015612dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de89190614290565b859063ffffffff611d5816565b90506123b285826129e8565b600082612e10575060006112e9565b82820282848281612e1d57fe5b0414611dbb5760405162461bcd60e51b8152600401610550906148d5565b6000611dbb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a5a565b6000611dbb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a86565b600082820183811015611dbb5760405162461bcd60e51b8152600401610550906146ea565b60608282604051602401612ef9929190614427565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f033290612f559087906000908690600401614440565b600060405180830381600087803b158015612f6f57600080fd5b505af1158015612f83573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ecf91908101906140be565b6001600160a01b03811660009081526007602090815260409182902080548351818402810184019094528084526060939283018282801561301557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612ff7575b505083519394506000925050505b8181101561291357600083828151811061303957fe5b6020026020010151905061304d85826136c1565b613079576001600160a01b0385166000908152600760205260409020613079908263ffffffff61376816565b50600101613023565b600061308c613db3565b61309583610c6e565b9050611dbb6130d6846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbf57600080fd5b61109883606001516131018560400151613101876020015188600001516131c190919063ffffffff16565b9063ffffffff6131c116565b6000611dbb670de0b6b3a76400006129a3858563ffffffff61389416565b613133613d85565b6040805160a0810182526001600160a01b03808816825286166020820152600085139181018290526060810161316886613abd565b8152602001849052915050949350505050565b60008183038183128015906131905750838113155b806131a557506000831280156131a557508381135b611dbb5760405162461bcd60e51b815260040161055090614c81565b60008282018183128015906131d65750838112155b806131eb57506000831280156131eb57508381125b611dbb5760405162461bcd60e51b815260040161055090614758565b6000816132265760405162461bcd60e51b815260040161055090614d31565b61323e83670de0b6b3a764000063ffffffff61389416565b92506000613252848463ffffffff6138ff16565b905082848161325d57fe5b0715611dbb5760008385181361327757600019018061327c565b600101805b509392505050565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b1580156132c957600080fd5b505afa1580156132dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133019190613f3a565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906133439085906004016143d5565b60206040518083038186803b15801561335b57600080fd5b505afa15801561336f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339391906140a2565b80156112e957506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c906133c69030906004016143d5565b60206040518083038186803b1580156133de57600080fd5b505afa1580156133f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e991906140a2565b60006134eb7f00000000000000000000000000000000000000000000000000000000000000006121e261347b856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbf57600080fd5b6110987f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f8b2cb4f896040518263ffffffff1660e01b8152600401610d9291906143d5565b60405163afc4d07360e01b815290915073__$13ece96e109ecca4127c3a43d4737092d3$__9063afc4d07390611ea3906001600160a01b038616907f00000000000000000000000000000000000000000000000000000000000000009030908790600401614527565b6000805460405163792aa04f60e01b815282916001600160a01b03169063792aa04f906135879030908890600401614427565b60206040518083038186803b15801561359f57600080fd5b505afa1580156135b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d79190614290565b905061222f838263ffffffff6129ca16565b6000611dbb8360ff8416601203600a0a63ffffffff612e7d16565b801561073357610733826000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b15801561365b57600080fd5b505afa15801561366f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136939190613f3a565b6001600160a01b03861691908463ffffffff613aea16565b6000806136b88484613c2c565b95945050505050565b600080613751613703856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbf57600080fd5b6040516359deb70960e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b3bd6e129061104890899089906004016143e9565b9050600181138061222f5750600019139392505050565b6000806137ce848054806020026020016040519081016040528092919081815260200182805480156137c357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116137a5575b505050505084613c2c565b91509150806137ef5760405162461bcd60e51b81526004016105509061462d565b8354600019018281146138615784818154811061380857fe5b9060005260206000200160009054906101000a90046001600160a01b031685848154811061383257fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8480548061386b57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6000826138a3575060006112e9565b826000191480156138b75750600160ff1b82145b156138d45760405162461bcd60e51b8152600401610550906149a3565b828202828482816138e157fe5b0514611dbb5760405162461bcd60e51b8152600401610550906149a3565b60008161391e5760405162461bcd60e51b815260040161055090614cc5565b816000191480156139325750600160ff1b83145b1561394f5760405162461bcd60e51b81526004016105509061485d565b600082848161395a57fe5b05949350505050565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f7906133c69030906004016143d5565b805160209091012090565b6000805481906139b5906001600160a01b0316613c8f565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b81526004016139e2929190614427565b60206040518083038186803b1580156139fa57600080fd5b505afa158015613a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a329190613f3a565b90506001600160a01b0381166112e95760405162461bcd60e51b815260040161055090614799565b60008184841115613a7e5760405162461bcd60e51b8152600401610550919061461a565b505050900390565b60008183613aa75760405162461bcd60e51b8152600401610550919061461a565b506000838581613ab357fe5b0495945050505050565b600080821215613ae157613adc61082a8360001963ffffffff61389416565b6112e9565b6112e982611d32565b8015612913576040516370a0823160e01b81526000906001600160a01b038516906370a0823190613b1f9088906004016143d5565b60206040518083038186803b158015613b3757600080fd5b505afa158015613b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6f9190614290565b9050613b7d85858585613d0e565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190613bac9089906004016143d5565b60206040518083038186803b158015613bc457600080fd5b505afa158015613bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfc9190614290565b9050613c0e828463ffffffff612e3b16565b8114611ecf5760405162461bcd60e51b8152600401610550906149ea565b81516000908190815b81811015613c7f57846001600160a01b0316868281518110613c5357fe5b60200260200101516001600160a01b03161415613c77579250600191506119949050565b600101613c35565b5060001995600095509350505050565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced690613cbe908490600401614dac565b60206040518083038186803b158015613cd657600080fd5b505afa158015613cea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e99190613f3a565b80156129135760608282604051602401613d29929190614427565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f033290612f559087906000908690600401614440565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b5080546000825590600052602060002090810190611d2f919061121c91905b80821115611d545760008155600101613dfa565b600082601f830112613e1e578081fd5b8151613e31613e2c82614df4565b614dcd565b818152915060208083019084810181840286018201871015613e5257600080fd5b60005b84811015613e7157815184529282019290820190600101613e55565b505050505092915050565b600082601f830112613e8c578081fd5b8151613e9a613e2c82614df4565b8181529150602080830190848101606080850287018301881015613ebd57600080fd5b6000805b86811015613f115782848b031215613ed7578182fd5b613ee083614dcd565b8451613eeb81614e40565b815284860151868201526040808601519082015286529484019492820192600101613ec1565b5050505050505092915050565b600060208284031215613f2f578081fd5b8135611dbb81614e40565b600060208284031215613f4b578081fd5b8151611dbb81614e40565b60006020808385031215613f68578182fd5b825167ffffffffffffffff811115613f7e578283fd5b80840185601f820112613f8f578384fd5b80519150613f9f613e2c83614df4565b8281528381019082850185850284018601891015613fbb578687fd5b8693505b84841015613fe6578051613fd281614e40565b835260019390930192918501918501613fbf565b50979650505050505050565b60008060408385031215614004578081fd5b825167ffffffffffffffff8082111561401b578283fd5b61402786838701613e0e565b9350602085015191508082111561403c578283fd5b5061404985828601613e0e565b9150509250929050565b600060208284031215614064578081fd5b815167ffffffffffffffff81111561407a578182fd5b61222f84828501613e7c565b600060208284031215614097578081fd5b8135611dbb81614e55565b6000602082840312156140b3578081fd5b8151611dbb81614e55565b6000602082840312156140cf578081fd5b815167ffffffffffffffff808211156140e6578283fd5b81840185601f8201126140f7578384fd5b8051925081831115614107578384fd5b61411a601f8401601f1916602001614dcd565b9150828252856020848301011115614130578384fd5b614141836020840160208401614e14565b50949350505050565b6000806000806080858703121561415f578182fd5b843561416a81614e40565b9350602085013561417a81614e40565b93969395505050506040820135916060013590565b600080604083850312156141a1578182fd5b82356141ac81614e40565b915060208301356141bc81614e55565b809150509250929050565b600080604083850312156141d9578182fd5b82356141e481614e40565b915060208301356141bc81614e40565b60008060408385031215614206578182fd5b823561421181614e40565b946020939093013593505050565b60008060008060808587031215614234578182fd5b843561423f81614e40565b935060208501359250604085013561425681614e40565b9150606085013561426681614e55565b939692955090935050565b600060208284031215614282578081fd5b815160038110611dbb578182fd5b6000602082840312156142a1578081fd5b5051919050565b6000806000606084860312156142bc578081fd5b8351925060208401519150604084015190509250925092565b6000602082840312156142e6578081fd5b5035919050565b600080604083850312156142ff578182fd5b505080516020909101519092909150565b6000815180845260208085019450808401835b8381101561433f57815187529582019590820190600101614323565b509495945050505050565b60008151808452614362816020860160208601614e14565b601f01601f19169290920160200192915050565b80516001600160a01b0390811683526020808301519091169083015260408082015115159083015260608082015190830152608090810151910152565b80516001600160a01b0316825260208082015190830152604090810151910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b0385168252836020830152606060408301526136b8606083018461434a565b60006040825261447a6040830185614310565b82810360208401526136b88185614310565b6020808252825182820181905260009190848201906040850190845b818110156144ce576144bb8385516143b3565b92840192606092909201916001016144a8565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156144ce576145098385516143b3565b92840192606092909201916001016144f6565b901515815260200190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b60006060820160018060a01b03808716845260206060818601528287548085526080870191508886528286209450855b818110156145d75785548516835260019586019592840192016145b9565b5050809450505080851660408501525050949350505050565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b600060208252611dbb602083018461434a565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252600f908201526e082dadeeadce840e8dede40d0d2ced608b1b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526018908201527f49737375616e6365206e6f7420696e697469616c697a65640000000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526010908201526f24b73b30b634b21029b2ba2a37b5b2b760811b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152732737ba1030b63637bbb2b21029b2ba2a37b5b2b760611b604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b60208082526013908201527204465706f73697420616d6f756e74206973203606c1b604082015260600190565b6020808252600b908201526a0416d6f756e7420697320360ac1b604082015260600190565b60208082526027908201527f45786365656473206d61782070657270657475616c20706f736974696f6e73206040820152661c195c881cd95d60ca1b606082015260800190565b6020808252601490820152730576974686472617720616d6f756e7420697320360641b604082015260600190565b60208082526019908201527f4261736520746f6b656e20646f6573206e6f7420657869737400000000000000604082015260600190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b6020808252601690820152754163636f756e742062616c616e63652065786973747360501b604082015260600190565b602080825260129082015271496e76657273696f6e206f766572666c6f7760701b604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526010908201526f043616e742064697669646520627920360841b604082015260600190565b8151815260208083015190820152604080830151908201526060918201519181019190915260800190565b60c08101614d948285614376565b6001600160a01b039290921660a09190910152919050565b90815260200190565b92835260208301919091521515604082015260600190565b60405181810167ffffffffffffffff81118282101715614dec57600080fd5b604052919050565b600067ffffffffffffffff821115614e0a578081fd5b5060209081020190565b60005b83811015614e2f578181015183820152602001614e17565b838111156129135750506000910152565b6001600160a01b0381168114611d2f57600080fd5b8015158114611d2f57600080fdfea264697066735822122094e8bbe8d7c12788d003a814fc3c8651f6ece5edc5836c1de6bda573cf06212c64736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80639f71e2691161010f578063cb44f343116100a2578063f2fde38b11610071578063f2fde38b146103ec578063f3fef3a3146103ff578063f77c479114610412578063fc62d9fe1461041a576101f0565b8063cb44f34314610390578063d23cd56414610398578063da1cbb48146103b9578063ee78244f146103d9576101f0565b8063c137f4d7116100de578063c137f4d714610344578063c153dd0714610357578063c4d66de81461036a578063c690a74c1461037d576101f0565b80639f71e26914610317578063b1dd4d921461031f578063b2016bd414610334578063b2ad61d51461033c576101f0565b8063616516f2116101875780637b510fe8116101565780637b510fe8146102c7578063847ef08d146102e75780638da5cb5b146102ef57806395ba2006146102f7576101f0565b8063616516f21461029c5780636273010d146102a45780636aecef92146102ac578063715018a6146102bf576101f0565b80633fe6106b116101c35780633fe6106b1461025057806347e7ef24146102635780635199e418146102765780635b13651214610289576101f0565b80630b23207c146101f55780630fb96b211461021357806326b4fc48146102285780632ed804cd1461023d575b600080fd5b6101fd61042d565b60405161020a91906143d5565b60405180910390f35b61022661022136600461421f565b610451565b005b610230610515565b60405161020a9190614dac565b61022661024b3660046142d5565b61051b565b61022661025e3660046141f4565b61055e565b6102266102713660046141f4565b610738565b610226610284366004614086565b6108c7565b6102266102973660046141c7565b610939565b6101fd610a35565b6101fd610a59565b6102266102ba36600461414a565b610a7d565b610226610bef565b6102da6102d5366004613f1e565b610c6e565b60405161020a9190614d5b565b610226610f6f565b6101fd61120f565b61030a610305366004613f1e565b61121f565b60405161020a919061448c565b6101fd6112ef565b610327611313565b60405161020a919061451c565b6101fd61131c565b6101fd611340565b61022661035236600461421f565b611364565b6102266103653660046141f4565b61141e565b610226610378366004613f1e565b61156d565b61022661038b36600461418f565b6117df565b6101fd611927565b6103ab6103a63660046141f4565b61194b565b60405161020a929190614467565b6103cc6103c7366004613f1e565b61199b565b60405161020a91906144da565b6103276103e7366004613f1e565b611a11565b6102266103fa366004613f1e565b611a26565b61022661040d3660046141f4565b611add565b6101fd611ba8565b6103ab6104283660046141f4565b611bb7565b7f000000000000000000000000000000000000000000000000000000000000000081565b8361045b81611bed565b811561050e576040516308bafae960e21b81526000906001600160a01b038716906322ebeba49061049290879030906004016143e9565b60206040518083038186803b1580156104aa57600080fd5b505afa1580156104be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e29190614290565b905060006104ff6104f283611d32565b879063ffffffff611d5816565b905061050b8782611dc2565b50505b5050505050565b60065481565b610523611ed7565b6002546001600160a01b039081169116146105595760405162461bcd60e51b815260040161055090614940565b60405180910390fd5b600655565b8161056881611bed565b826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a157600080fd5b505afa1580156105b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d99190614290565b6105e257610733565b6040516303b9474360e41b815273__$13ece96e109ecca4127c3a43d4737092d3$__90633b94743090610644906001600160a01b038716907f0000000000000000000000000000000000000000000000000000000000000000906004016143e9565b60206040518083038186803b15801561065c57600080fd5b505af4158015610670573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069491906140a2565b61069d57610733565b60006106ac8484600080611edb565b6040516363a90fc160e01b81529091506001600160a01b038516906363a90fc1906106ff907f00000000000000000000000000000000000000000000000000000000000000009030908690600401614403565b600060405180830381600087803b15801561071957600080fd5b505af115801561072d573d6000803e3d6000fd5b50505050505b505050565b6002600154141561075b5760405162461bcd60e51b815260040161055090614cfa565b60026001558161076a81612237565b6000821161078a5760405162461bcd60e51b815260040161055090614a21565b6040516366cb8d2f60e01b815261082f906001600160a01b038516906366cb8d2f906107da907f0000000000000000000000000000000000000000000000000000000000000000906004016143d5565b60206040518083038186803b1580156107f257600080fd5b505afa158015610806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a9190614290565b611d32565b82111561084e5760405162461bcd60e51b8152600401610550906147c8565b600061085a8484612282565b9050807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03167ff1c0dd7e9b98bbff859029005ef89b127af049cd18df1a8d79f0b7e019911e5660405160405180910390a45050600180555050565b6108cf611ed7565b6002546001600160a01b039081169116146108fc5760405162461bcd60e51b815260040161055090614940565b6005805460ff19168215159081179091556040517f563e1633136cdd43b8793897cb53ba2a9e31c18b3ae0b6827fbbb03b9902e6c690600090a250565b8161094381612237565b6040516335fc6c9f60e21b81526001600160a01b0384169063d7f1b27c9061096f9085906004016143d5565b60206040518083038186803b15801561098757600080fd5b505afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf91906140a2565b6109db5760405162461bcd60e51b81526004016105509061489e565b6040516306cd8db760e51b81526001600160a01b0383169063d9b1b6e090610a079086906004016143d5565b600060405180830381600087803b158015610a2157600080fd5b505af115801561050b573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026001541415610aa05760405162461bcd60e51b815260040161055090614cfa565b600260015583610aaf81612237565b610ab7613d85565b610ac3868686866124e6565b905060008073__$37f46b63326be74363878a0a0fa6eea058$__63d4c2a2cd847f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401610b21929190614d86565b604080518083038186803b158015610b3857600080fd5b505af4158015610b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7091906142ed565b915091506000610b808983612759565b9050610b8c89896127d2565b82886001600160a01b03168a6001600160a01b03167f8b0c425c114ae7dafe6923dc427254a88c77c214b02e6b8436e08af3313e2ff585858960400151604051610bd893929190614db5565b60405180910390a450506001805550505050505050565b610bf7611ed7565b6002546001600160a01b03908116911614610c245760405162461bcd60e51b815260040161055090614940565b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b610c76613db3565b60405163bba85bcf60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bba85bcf90610cc59086906004016143d5565b60606040518083038186803b158015610cdd57600080fd5b505afa158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1591906142a8565b505060408051608081019182905263f8b2cb4f60e01b90915290915080610dee7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663f8b2cb4f610d9289608487016143d5565b60206040518083038186803b158015610daa57600080fd5b505afa158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de29190614290565b9063ffffffff61291916565b8152602001828152602001610e9d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166380f57f11876040518263ffffffff1660e01b8152600401610e4891906143d5565b60206040518083038186803b158015610e6057600080fd5b505afa158015610e74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e989190614290565b612934565b81526001600160a01b038516600090815260076020908152604091829020915163ef9f4b9f60e01b815292019173__$2aa9f85261a450f4a764d4c5a0e33a5378$__9163ef9f4b9f91610f169189917f000000000000000000000000000000000000000000000000000000000000000090600401614589565b60206040518083038186803b158015610f2e57600080fd5b505af4158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f669190614290565b90529392505050565b33610f798161225d565b600033905060006110a4610ffc836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbf57600080fd5b505afa158015610fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff79190614290565b612960565b604051635ae8095160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635ae80951906110489087906004016143d5565b60206040518083038186803b15801561106057600080fd5b505afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190614290565b9063ffffffff61298516565b905060016110d8827f000000000000000000000000000000000000000000000000000000000000000063ffffffff6129af16565b13156110f65760405162461bcd60e51b815260040161055090614c25565b6001600160a01b038216600090815260076020526040812061111791613ddb565b6060826001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b15801561115257600080fd5b505afa158015611166573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261118e9190810190613f56565b905060005b815181101561050e578181815181106111a857fe5b60200260200101516001600160a01b031663e0799620856040518263ffffffff1660e01b81526004016111db91906143d5565b600060405180830381600087803b1580156111f557600080fd5b505af1925050508015611206575060015b50600101611193565b6002546001600160a01b03165b90565b6001600160a01b038116600090815260076020526040908190209051634e1910b360e01b815260609173__$2aa9f85261a450f4a764d4c5a0e33a5378$__91634e1910b391611295918691907f000000000000000000000000000000000000000000000000000000000000000090600401614589565b60006040518083038186803b1580156112ad57600080fd5b505af41580156112c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112e99190810190614053565b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60055460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b8361136e81611bed565b811561050e576040516308bafae960e21b81526000906001600160a01b038716906322ebeba4906113a590879030906004016143e9565b60206040518083038186803b1580156113bd57600080fd5b505afa1580156113d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f59190614290565b9050600061141261140583611d32565b879063ffffffff6129ca16565b905061050b87826129e8565b8161142881611bed565b826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561146157600080fd5b505afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190614290565b6114a257610733565b6040516303b9474360e41b815273__$13ece96e109ecca4127c3a43d4737092d3$__90633b94743090611504906001600160a01b038716907f0000000000000000000000000000000000000000000000000000000000000000906004016143e9565b60206040518083038186803b15801561151c57600080fd5b505af4158015611530573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155491906140a2565b61155d57610733565b60006106ac848460016000611edb565b80336115798282612a7c565b8261158381612aa2565b600554849060ff166115c7576001600160a01b03811660009081526004602052604090205460ff166115c75760405162461bcd60e51b815260040161055090614975565b846001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561160257600080fd5b505af1158015611616573d6000803e3d6000fd5b50505050846001600160a01b031663d7f1b27c61165f6040518060400160405280601581526020017444656661756c7449737375616e63654d6f64756c6560581b815250612b63565b6040518263ffffffff1660e01b815260040161167b91906143d5565b60206040518083038186803b15801561169357600080fd5b505afa1580156116a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cb91906140a2565b6116e75760405162461bcd60e51b81526004016105509061489e565b6060856001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b15801561172257600080fd5b505afa158015611736573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261175e9190810190613f56565b905060005b815181101561050b5781818151811061177857fe5b60200260200101516001600160a01b031663d9b1b6e0886040518263ffffffff1660e01b81526004016117ab91906143d5565b600060405180830381600087803b1580156117c557600080fd5b505af19250505080156117d6575060015b50600101611763565b6117e7611ed7565b6002546001600160a01b039081169116146118145760405162461bcd60e51b815260040161055090614940565b600354604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906118449085906004016143d5565b60206040518083038186803b15801561185c57600080fd5b505afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189491906140a2565b806118b757506001600160a01b03821660009081526004602052604090205460ff165b6118d35760405162461bcd60e51b815260040161055090614916565b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f2035981b48691b10f6ac65174e570b4d0a8a889ae01bef3e5e7759ff9444f0c491a35050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0382166000908152600760205260408120546060918291611974576000611982565b611982858560006001611edb565b905061198e8582612b7a565b92509250505b9250929050565b6001600160a01b0381166000908152600760205260409081902090516322f1c36560e21b815260609173__$2aa9f85261a450f4a764d4c5a0e33a5378$__91638bc70d9491611295918691907f000000000000000000000000000000000000000000000000000000000000000090600401614589565b60046020526000908152604090205460ff1681565b611a2e611ed7565b6002546001600160a01b03908116911614611a5b5760405162461bcd60e51b815260040161055090614940565b6001600160a01b038116611a815760405162461bcd60e51b8152600401610550906146a4565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b60026001541415611b005760405162461bcd60e51b815260040161055090614cfa565b600260015581611b0f81612237565b60008211611b2f5760405162461bcd60e51b815260040161055090614aba565b6000611b3b8484612cd1565b9050807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03167f45892a46e6cef329bb642da6d69846d324db43d19008edc141ed82382eda1bee60405160405180910390a45050600180555050565b6000546001600160a01b031681565b6001600160a01b0382166000908152600760205260408120546060918291611be0576000611982565b6119828585600180611edb565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e5290611c1b9033906004016143d5565b60206040518083038186803b158015611c3357600080fd5b505afa158015611c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6b9190614271565b6002811115611c7657fe5b14611c935760405162461bcd60e51b815260040161055090614826565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e38990611cc39033906004016143d5565b60206040518083038186803b158015611cdb57600080fd5b505afa158015611cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1391906140a2565b611d2f5760405162461bcd60e51b815260040161055090614b67565b50565b600080821215611d545760405162461bcd60e51b8152600401610550906147f1565b5090565b6000821580611d65575081155b15611d72575060006112e9565b611dbb6001611daf670de0b6b3a7640000611da383611d97898963ffffffff612e0116565b9063ffffffff612e3b16565b9063ffffffff612e7d16565b9063ffffffff612ebf16565b9392505050565b611e1d6001600160a01b0383167f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008463ffffffff612ee416565b6040516305e190a960e21b815273__$37f46b63326be74363878a0a0fa6eea058$__9063178642a490611ea3906001600160a01b038616907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009087906004016145f0565b60006040518083038186803b158015611ebb57600080fd5b505af4158015611ecf573d6000803e3d6000fd5b505050505050565b3390565b6000611ee685612fab565b6000611ef185612960565b90506000611f0e82611f0289613082565b9063ffffffff61310d16565b90506060611f1b8861121f565b90506000815190506000611f618a6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbf57600080fd5b905060005b82811015612192576000611f9e87611f0285888681518110611f8457fe5b60200260200101516020015161298590919063ffffffff16565b9050611fa8613d85565b611fe08d878581518110611fb857fe5b6020026020010151600001518d611fd757611fd285612934565b611fd9565b845b600061312b565b905060008a6120965760405163d4c2a2cd60e01b815273__$37f46b63326be74363878a0a0fa6eea058$__9063d4c2a2cd906120429085907f000000000000000000000000000000000000000000000000000000000000000090600401614d86565b604080518083038186803b15801561205957600080fd5b505af415801561206d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209191906142ed565b61213e565b60405163740a93a760e11b815273__$37f46b63326be74363878a0a0fa6eea058$__9063e815274e906120ef9085907f000000000000000000000000000000000000000000000000000000000000000090600401614d86565b604080518083038186803b15801561210657600080fd5b505af415801561211a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213e91906142ed565b91505060008312156121685761216361215682612960565b899063ffffffff61317b16565b612181565b61218161217482612960565b899063ffffffff6131c116565b97505060019092019150611f669050565b50600084136121a95760009550505050505061222f565b876121f3576121ee7f00000000000000000000000000000000000000000000000000000000000000006121e2868863ffffffff61298516565b9063ffffffff6129af16565b612227565b6122277f00000000000000000000000000000000000000000000000000000000000000006121e2868863ffffffff61320716565b955050505050505b949350505050565b6122418133613284565b61225d5760405162461bcd60e51b815260040161055090614bee565b61226681613312565b611d2f5760405162461bcd60e51b81526004016105509061465c565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231856040518263ffffffff1660e01b81526004016122d191906143d5565b60206040518083038186803b1580156122e957600080fd5b505afa1580156122fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123219190614290565b905060006123a6856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561236157600080fd5b505afa158015612375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123999190614290565b859063ffffffff6129ca16565b90506123b28582611dc2565b846001600160a01b031673__$13ece96e109ecca4127c3a43d4737092d3$__63d4a56b7990917f0000000000000000000000000000000000000000000000000000000000000000886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561243257600080fd5b505afa158015612446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246a9190614290565b866040518563ffffffff1660e01b815260040161248a9493929190614560565b60606040518083038186803b1580156124a257600080fd5b505af41580156124b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124da91906142a8565b50505061222f85613416565b6124ee613d85565b8261250b5760405162461bcd60e51b815260040161055090614a4e565b604051631246dbf560e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631246dbf5906125579087906004016143d5565b60206040518083038186803b15801561256f57600080fd5b505afa158015612583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a791906140a2565b6125c35760405162461bcd60e51b815260040161055090614ae8565b6000856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125fe57600080fd5b505afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126369190614290565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b3bd6e1288886040518363ffffffff1660e01b81526004016126889291906143e9565b60206040518083038186803b1580156126a057600080fd5b505afa1580156126b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d89190614290565b905060006126f56126e884612960565b839063ffffffff61298516565b9050600061270282612934565b87146127265761272161271485612960565b889063ffffffff61310d16565b61272f565b61272f83612934565b905061274c8989836127478a8963ffffffff6129ca16565b61312b565b9998505050505050505050565b600080612767600084613554565b9050600061279b827f000000000000000000000000000000000000000000000000000000000000000063ffffffff6135e916565b90506127a785826129e8565b61222f857f000000000000000000000000000000000000000000000000000000000000000083613604565b6001600160a01b03821660009081526007602090815260409182902080548351818402810184019094528084526060939283018282801561283c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161281e575b50505050509050600061285883836136ab90919063ffffffff16565b9050801561289b5761286a84846136c1565b612896576001600160a01b0384166000908152600760205260409020612896908463ffffffff61376816565b612913565b6006546001600160a01b038516600090815260076020526040902054106128d45760405162461bcd60e51b815260040161055090614a73565b6001600160a01b0384811660009081526007602090815260408220805460018101825590835291200180546001600160a01b0319169185169190911790555b50505050565b6000611dbb8360ff8416601203600a0a63ffffffff61389416565b6000600160ff1b82136129595760405162461bcd60e51b815260040161055090614c55565b5060000390565b6000600160ff1b8210611d545760405162461bcd60e51b815260040161055090614b1f565b6000611dbb826129a385670de0b6b3a764000063ffffffff61389416565b9063ffffffff6138ff16565b6000611dbb8360ff8416601203600a0a63ffffffff6138ff16565b6000611dbb670de0b6b3a7640000611da3858563ffffffff612e0116565b806129f257612a78565b604051632ab3e8ef60e11b815273__$37f46b63326be74363878a0a0fa6eea058$__90635567d1de90611ea3906001600160a01b038616907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009087906004016145f0565b5050565b612a868282613284565b612a785760405162461bcd60e51b815260040161055090614bee565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90612ad29084906004016143d5565b60206040518083038186803b158015612aea57600080fd5b505afa158015612afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2291906140a2565b612b3e5760405162461bcd60e51b815260040161055090614bab565b612b4781613963565b611d2f5760405162461bcd60e51b815260040161055090614721565b600080612b6f83613992565b9050611dbb8161399d565b6060806000846001600160a01b03166322ebeba47f0000000000000000000000000000000000000000000000000000000000000000306040518363ffffffff1660e01b8152600401612bcd9291906143e9565b60206040518083038186803b158015612be557600080fd5b505afa158015612bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1d9190614290565b6040516304e381f560e31b815290915073__$2aa9f85261a450f4a764d4c5a0e33a5378$__9063271c0fa890612c7d9088907f00000000000000000000000000000000000000000000000000000000000000009086908a90600401614560565b60006040518083038186803b158015612c9557600080fd5b505af4158015612ca9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261198e9190810190613ff2565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231856040518263ffffffff1660e01b8152600401612d2091906143d5565b60206040518083038186803b158015612d3857600080fd5b505afa158015612d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d709190614290565b90506000612df5856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612db057600080fd5b505afa158015612dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de89190614290565b859063ffffffff611d5816565b90506123b285826129e8565b600082612e10575060006112e9565b82820282848281612e1d57fe5b0414611dbb5760405162461bcd60e51b8152600401610550906148d5565b6000611dbb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a5a565b6000611dbb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a86565b600082820183811015611dbb5760405162461bcd60e51b8152600401610550906146ea565b60608282604051602401612ef9929190614427565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f033290612f559087906000908690600401614440565b600060405180830381600087803b158015612f6f57600080fd5b505af1158015612f83573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ecf91908101906140be565b6001600160a01b03811660009081526007602090815260409182902080548351818402810184019094528084526060939283018282801561301557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612ff7575b505083519394506000925050505b8181101561291357600083828151811061303957fe5b6020026020010151905061304d85826136c1565b613079576001600160a01b0385166000908152600760205260409020613079908263ffffffff61376816565b50600101613023565b600061308c613db3565b61309583610c6e565b9050611dbb6130d6846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbf57600080fd5b61109883606001516131018560400151613101876020015188600001516131c190919063ffffffff16565b9063ffffffff6131c116565b6000611dbb670de0b6b3a76400006129a3858563ffffffff61389416565b613133613d85565b6040805160a0810182526001600160a01b03808816825286166020820152600085139181018290526060810161316886613abd565b8152602001849052915050949350505050565b60008183038183128015906131905750838113155b806131a557506000831280156131a557508381135b611dbb5760405162461bcd60e51b815260040161055090614c81565b60008282018183128015906131d65750838112155b806131eb57506000831280156131eb57508381125b611dbb5760405162461bcd60e51b815260040161055090614758565b6000816132265760405162461bcd60e51b815260040161055090614d31565b61323e83670de0b6b3a764000063ffffffff61389416565b92506000613252848463ffffffff6138ff16565b905082848161325d57fe5b0715611dbb5760008385181361327757600019018061327c565b600101805b509392505050565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b1580156132c957600080fd5b505afa1580156132dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133019190613f3a565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906133439085906004016143d5565b60206040518083038186803b15801561335b57600080fd5b505afa15801561336f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339391906140a2565b80156112e957506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c906133c69030906004016143d5565b60206040518083038186803b1580156133de57600080fd5b505afa1580156133f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e991906140a2565b60006134eb7f00000000000000000000000000000000000000000000000000000000000000006121e261347b856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbf57600080fd5b6110987f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f8b2cb4f896040518263ffffffff1660e01b8152600401610d9291906143d5565b60405163afc4d07360e01b815290915073__$13ece96e109ecca4127c3a43d4737092d3$__9063afc4d07390611ea3906001600160a01b038616907f00000000000000000000000000000000000000000000000000000000000000009030908790600401614527565b6000805460405163792aa04f60e01b815282916001600160a01b03169063792aa04f906135879030908890600401614427565b60206040518083038186803b15801561359f57600080fd5b505afa1580156135b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d79190614290565b905061222f838263ffffffff6129ca16565b6000611dbb8360ff8416601203600a0a63ffffffff612e7d16565b801561073357610733826000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b15801561365b57600080fd5b505afa15801561366f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136939190613f3a565b6001600160a01b03861691908463ffffffff613aea16565b6000806136b88484613c2c565b95945050505050565b600080613751613703856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbf57600080fd5b6040516359deb70960e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b3bd6e129061104890899089906004016143e9565b9050600181138061222f5750600019139392505050565b6000806137ce848054806020026020016040519081016040528092919081815260200182805480156137c357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116137a5575b505050505084613c2c565b91509150806137ef5760405162461bcd60e51b81526004016105509061462d565b8354600019018281146138615784818154811061380857fe5b9060005260206000200160009054906101000a90046001600160a01b031685848154811061383257fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8480548061386b57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6000826138a3575060006112e9565b826000191480156138b75750600160ff1b82145b156138d45760405162461bcd60e51b8152600401610550906149a3565b828202828482816138e157fe5b0514611dbb5760405162461bcd60e51b8152600401610550906149a3565b60008161391e5760405162461bcd60e51b815260040161055090614cc5565b816000191480156139325750600160ff1b83145b1561394f5760405162461bcd60e51b81526004016105509061485d565b600082848161395a57fe5b05949350505050565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f7906133c69030906004016143d5565b805160209091012090565b6000805481906139b5906001600160a01b0316613c8f565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b81526004016139e2929190614427565b60206040518083038186803b1580156139fa57600080fd5b505afa158015613a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a329190613f3a565b90506001600160a01b0381166112e95760405162461bcd60e51b815260040161055090614799565b60008184841115613a7e5760405162461bcd60e51b8152600401610550919061461a565b505050900390565b60008183613aa75760405162461bcd60e51b8152600401610550919061461a565b506000838581613ab357fe5b0495945050505050565b600080821215613ae157613adc61082a8360001963ffffffff61389416565b6112e9565b6112e982611d32565b8015612913576040516370a0823160e01b81526000906001600160a01b038516906370a0823190613b1f9088906004016143d5565b60206040518083038186803b158015613b3757600080fd5b505afa158015613b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6f9190614290565b9050613b7d85858585613d0e565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190613bac9089906004016143d5565b60206040518083038186803b158015613bc457600080fd5b505afa158015613bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfc9190614290565b9050613c0e828463ffffffff612e3b16565b8114611ecf5760405162461bcd60e51b8152600401610550906149ea565b81516000908190815b81811015613c7f57846001600160a01b0316868281518110613c5357fe5b60200260200101516001600160a01b03161415613c77579250600191506119949050565b600101613c35565b5060001995600095509350505050565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced690613cbe908490600401614dac565b60206040518083038186803b158015613cd657600080fd5b505afa158015613cea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e99190613f3a565b80156129135760608282604051602401613d29929190614427565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f033290612f559087906000908690600401614440565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b5080546000825590600052602060002090810190611d2f919061121c91905b80821115611d545760008155600101613dfa565b600082601f830112613e1e578081fd5b8151613e31613e2c82614df4565b614dcd565b818152915060208083019084810181840286018201871015613e5257600080fd5b60005b84811015613e7157815184529282019290820190600101613e55565b505050505092915050565b600082601f830112613e8c578081fd5b8151613e9a613e2c82614df4565b8181529150602080830190848101606080850287018301881015613ebd57600080fd5b6000805b86811015613f115782848b031215613ed7578182fd5b613ee083614dcd565b8451613eeb81614e40565b815284860151868201526040808601519082015286529484019492820192600101613ec1565b5050505050505092915050565b600060208284031215613f2f578081fd5b8135611dbb81614e40565b600060208284031215613f4b578081fd5b8151611dbb81614e40565b60006020808385031215613f68578182fd5b825167ffffffffffffffff811115613f7e578283fd5b80840185601f820112613f8f578384fd5b80519150613f9f613e2c83614df4565b8281528381019082850185850284018601891015613fbb578687fd5b8693505b84841015613fe6578051613fd281614e40565b835260019390930192918501918501613fbf565b50979650505050505050565b60008060408385031215614004578081fd5b825167ffffffffffffffff8082111561401b578283fd5b61402786838701613e0e565b9350602085015191508082111561403c578283fd5b5061404985828601613e0e565b9150509250929050565b600060208284031215614064578081fd5b815167ffffffffffffffff81111561407a578182fd5b61222f84828501613e7c565b600060208284031215614097578081fd5b8135611dbb81614e55565b6000602082840312156140b3578081fd5b8151611dbb81614e55565b6000602082840312156140cf578081fd5b815167ffffffffffffffff808211156140e6578283fd5b81840185601f8201126140f7578384fd5b8051925081831115614107578384fd5b61411a601f8401601f1916602001614dcd565b9150828252856020848301011115614130578384fd5b614141836020840160208401614e14565b50949350505050565b6000806000806080858703121561415f578182fd5b843561416a81614e40565b9350602085013561417a81614e40565b93969395505050506040820135916060013590565b600080604083850312156141a1578182fd5b82356141ac81614e40565b915060208301356141bc81614e55565b809150509250929050565b600080604083850312156141d9578182fd5b82356141e481614e40565b915060208301356141bc81614e40565b60008060408385031215614206578182fd5b823561421181614e40565b946020939093013593505050565b60008060008060808587031215614234578182fd5b843561423f81614e40565b935060208501359250604085013561425681614e40565b9150606085013561426681614e55565b939692955090935050565b600060208284031215614282578081fd5b815160038110611dbb578182fd5b6000602082840312156142a1578081fd5b5051919050565b6000806000606084860312156142bc578081fd5b8351925060208401519150604084015190509250925092565b6000602082840312156142e6578081fd5b5035919050565b600080604083850312156142ff578182fd5b505080516020909101519092909150565b6000815180845260208085019450808401835b8381101561433f57815187529582019590820190600101614323565b509495945050505050565b60008151808452614362816020860160208601614e14565b601f01601f19169290920160200192915050565b80516001600160a01b0390811683526020808301519091169083015260408082015115159083015260608082015190830152608090810151910152565b80516001600160a01b0316825260208082015190830152604090810151910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b0385168252836020830152606060408301526136b8606083018461434a565b60006040825261447a6040830185614310565b82810360208401526136b88185614310565b6020808252825182820181905260009190848201906040850190845b818110156144ce576144bb8385516143b3565b92840192606092909201916001016144a8565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156144ce576145098385516143b3565b92840192606092909201916001016144f6565b901515815260200190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b60006060820160018060a01b03808716845260206060818601528287548085526080870191508886528286209450855b818110156145d75785548516835260019586019592840192016145b9565b5050809450505080851660408501525050949350505050565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b600060208252611dbb602083018461434a565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252600f908201526e082dadeeadce840e8dede40d0d2ced608b1b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526018908201527f49737375616e6365206e6f7420696e697469616c697a65640000000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526010908201526f24b73b30b634b21029b2ba2a37b5b2b760811b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152732737ba1030b63637bbb2b21029b2ba2a37b5b2b760611b604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b60208082526013908201527204465706f73697420616d6f756e74206973203606c1b604082015260600190565b6020808252600b908201526a0416d6f756e7420697320360ac1b604082015260600190565b60208082526027908201527f45786365656473206d61782070657270657475616c20706f736974696f6e73206040820152661c195c881cd95d60ca1b606082015260800190565b6020808252601490820152730576974686472617720616d6f756e7420697320360641b604082015260600190565b60208082526019908201527f4261736520746f6b656e20646f6573206e6f7420657869737400000000000000604082015260600190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b6020808252601690820152754163636f756e742062616c616e63652065786973747360501b604082015260600190565b602080825260129082015271496e76657273696f6e206f766572666c6f7760701b604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526010908201526f043616e742064697669646520627920360841b604082015260600190565b8151815260208083015190820152604080830151908201526060918201519181019190915260800190565b60c08101614d948285614376565b6001600160a01b039290921660a09190910152919050565b90815260200190565b92835260208301919091521515604082015260600190565b60405181810167ffffffffffffffff81118282101715614dec57600080fd5b604052919050565b600067ffffffffffffffff821115614e0a578081fd5b5060209081020190565b60005b83811015614e2f578181015183820152602001614e17565b838111156129135750506000910152565b6001600160a01b0381168114611d2f57600080fd5b8015158114611d2f57600080fdfea264697066735822122094e8bbe8d7c12788d003a814fc3c8651f6ece5edc5836c1de6bda573cf06212c64736f6c634300060a0033",
  "linkReferences": {
    "contracts/protocol/integration/lib/PerpV2LibraryV2.sol": {
      "PerpV2LibraryV2": [
        {
          "length": 20,
          "start": 4242
        },
        {
          "length": 20,
          "start": 9204
        },
        {
          "length": 20,
          "start": 9664
        },
        {
          "length": 20,
          "start": 9837
        },
        {
          "length": 20,
          "start": 12233
        }
      ]
    },
    "contracts/protocol/integration/lib/PerpV2Positions.sol": {
      "PerpV2Positions": [
        {
          "length": 20,
          "start": 5268
        },
        {
          "length": 20,
          "start": 6162
        },
        {
          "length": 20,
          "start": 8078
        },
        {
          "length": 20,
          "start": 12791
        }
      ]
    },
    "contracts/protocol/lib/PositionV2.sol": {
      "PositionV2": [
        {
          "length": 20,
          "start": 3001
        },
        {
          "length": 20,
          "start": 6777
        },
        {
          "length": 20,
          "start": 10630
        },
        {
          "length": 20,
          "start": 15045
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/protocol/integration/lib/PerpV2LibraryV2.sol": {
      "PerpV2LibraryV2": [
        {
          "length": 20,
          "start": 2762
        },
        {
          "length": 20,
          "start": 7724
        },
        {
          "length": 20,
          "start": 8184
        },
        {
          "length": 20,
          "start": 8357
        },
        {
          "length": 20,
          "start": 10753
        }
      ]
    },
    "contracts/protocol/integration/lib/PerpV2Positions.sol": {
      "PerpV2Positions": [
        {
          "length": 20,
          "start": 3788
        },
        {
          "length": 20,
          "start": 4682
        },
        {
          "length": 20,
          "start": 6598
        },
        {
          "length": 20,
          "start": 11311
        }
      ]
    },
    "contracts/protocol/lib/PositionV2.sol": {
      "PositionV2": [
        {
          "length": 20,
          "start": 1521
        },
        {
          "length": 20,
          "start": 5297
        },
        {
          "length": 20,
          "start": 9150
        },
        {
          "length": 20,
          "start": 13565
        }
      ]
    }
  }
}
