{
  "_format": "hh-sol-artifact-1",
  "contractName": "ThreePieceWiseLinearFeeCurveTester",
  "sourceName": "contracts/PriceCurves/ThreePieceWiseLinearPriceCurveTester.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "controllerAddress",
          "type": "address"
        }
      ],
      "name": "AddressesSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousDecayTime",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decayTime",
          "type": "uint256"
        }
      ],
      "name": "DecayTimeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousDollarCap",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "dollarCap",
          "type": "uint256"
        }
      ],
      "name": "DollarCapSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousLastFeePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousLastFeeTime",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lastFeePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lastFeeTime",
          "type": "uint256"
        }
      ],
      "name": "FeeCapAndTimeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "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": false,
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "m1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "b1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "m2",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cutoff1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "m3",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cutoff2",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "dollarCap",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decayTime",
          "type": "uint256"
        }
      ],
      "name": "ParamsAdjusted",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_m1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_b1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_m2",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_cutoff1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_m3",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_cutoff2",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_dollarCap",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_decayTime",
          "type": "uint256"
        }
      ],
      "name": "adjustParams",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "b1",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "b2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "b2Negative",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "b3",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "b3Negative",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "calculateDecayedFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controllerAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cutoff1",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cutoff2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decayTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "dollarCap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_collateralVCInput",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalCollateralVCBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalVCBalancePre",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalVCBalancePost",
          "type": "uint256"
        }
      ],
      "name": "getFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "feeCalculated",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_collateralVCInput",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalCollateralVCBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalVCBalancePre",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalVCBalancePost",
          "type": "uint256"
        }
      ],
      "name": "getFeeAndUpdate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "feeCalculated",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFeeCapAndTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_controllerAddress",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastFeeTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "m1",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "m2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "m3",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paramsInitialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_decayTime",
          "type": "uint256"
        }
      ],
      "name": "setDecayTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_dollarCap",
          "type": "uint256"
        }
      ],
      "name": "setDollarCap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_lastFeePercent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lastFeeTime",
          "type": "uint256"
        }
      ],
      "name": "setFeeCapAndTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061131e806100206000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063a0230b4f11610104578063ce405095116100a2578063e9b6190911610071578063e9b6190914610385578063ee4950021461038e578063f2cfd55114610397578063f2fde38b146103b257600080fd5b8063ce40509514610358578063d26e6aa414610361578063d33fa1fe14610369578063e98f61761461037257600080fd5b8063a77f92ff116100de578063a77f92ff14610320578063b34b408e14610329578063be1420231461033c578063c4d66de81461034557600080fd5b8063a0230b4f146102fa578063a0716db514610303578063a5bef6d81461031757600080fd5b80634b24ea471161017c57806373ddaef41161014b57806373ddaef4146102ba5780638da5cb5b146102cd57806391aa69ca146102de57806397498845146102e757600080fd5b80634b24ea47146102715780635de322e31461029c57806366b5ae1f146102a9578063715018a6146102b257600080fd5b8063158ef93e116101b8578063158ef93e146102295780632bf838c3146102485780632c3609a0146102515780633ab2fb2b1461026457600080fd5b806306fdde03146101df5780630add6ef2146101fd57806311cfe6a914610214575b600080fd5b6101e76103c5565b6040516101f49190610f25565b60405180910390f35b610206606a5481565b6040519081526020016101f4565b610227610222366004610f38565b610453565b005b6074546001600160a01b031615155b60405190151581526020016101f4565b610206606c5481565b61022761025f366004610f51565b61049c565b606f546102389060ff1681565b607454610284906001600160a01b031681565b6040516001600160a01b0390911681526020016101f4565b606b546102389060ff1681565b61020660715481565b610227610554565b6102066102c8366004610f73565b610568565b6033546001600160a01b0316610284565b61020660695481565b6102276102f5366004610f38565b61057f565b610206606d5481565b60745461023890600160a01b900460ff1681565b61020660735481565b61020660665481565b610227610337366004610fbb565b6105c8565b61020660725481565b6102276103533660046110ad565b6107dd565b61020660685481565b61020661095c565b61020660705481565b610206610380366004610f73565b6109b0565b610206606e5481565b61020660675481565b607254607154604080519283526020830191909152016101f4565b6102276103c03660046110ad565b610a2b565b606580546103d2906110d6565b80601f01602080910402602001604051908101604052809291908181526020018280546103fe906110d6565b801561044b5780601f106104205761010080835404028352916020019161044b565b820191906000526020600020905b81548152906001019060200180831161042e57829003601f168201915b505050505081565b61045b610abb565b60735460408051918252602082018390527f24399c5dc569ae6a84e4f1f5b920be8287c6b4641798200e4a061c7f0e5f104d910160405180910390a1607355565b6074546001600160a01b031633146104fb5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206d75737420626520636f6e74726f6c6c65720000000000000060448201526064015b60405180910390fd5b6072546071546040805192835260208301919091528101839052606081018290527f46260e4b1cf55abf72e8979ac735bccbb337ae91602223beefa84e215677d4a69060800160405180910390a1607291909155607155565b61055c610abb565b6105666000610b15565b565b600061057685858585610b74565b95945050505050565b610587610abb565b60705460408051918252602082018390527f174b6c5c9fb671a22fef882eb99be5ffda98949070adf83534f2ab1846078b85910160405180910390a1607055565b6105d0610abb565b828511156106205760405162461bcd60e51b815260206004820152601a60248201527f4375746f666673206d75737420626520696e6372656173696e6700000000000060448201526064016104f2565b606561062c8a8261115f565b50606688905560678790556069869055600087670de0b6b3a7640000610652888c611235565b61065c919061124c565b610666919061126e565b90506000670de0b6b3a764000061067d888a611235565b610687919061124c565b9050818111156106b057606b805460ff191660011790556106a88282611281565b606a556106be565b6106ba8183611281565b606a555b6068879055606d869055606a54670de0b6b3a76400006106de878b611235565b6106e8919061124c565b6106f2919061126e565b90506000670de0b6b3a76400006107098789611235565b610713919061124c565b90508181111561073c57606f805460ff191660011790556107348282611281565b606e5561074a565b6107468183611281565b606e555b606c86905560738590556070849055607480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517fd833f19f31456e9c8d409b98370fe385ee40472047f2b6c0d5decb3e20a21611906107c7908e908e908e908e908e908e908e908e908e90611294565b60405180910390a1505050505050505050505050565b600054610100900460ff16158080156107fd5750600054600160ff909116105b806108175750303b158015610817575060005460ff166001145b6108895760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104f2565b6000805460ff1916600117905580156108ac576000805461ff0019166101001790555b6108b4610c47565b6074805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040519081527f42a456866a0731114133c0b0a1ac4c629e13e3c9eee0aa94fc6f96ad93c362d69060200160405180910390a18015610958576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6000806071544261096d9190611281565b6070549091508082116109a75780826072546109899190611235565b610993919061124c565b6072546109a09190611281565b9250505090565b60009250505090565b6074546000906001600160a01b03163314610a0d5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c7920636f6e74726f6c6c65722063616e2075706461746520666565000060448201526064016104f2565b610a1985858585610b74565b42607155607281905595945050505050565b610a33610abb565b6001600160a01b038116610aaf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104f2565b610ab881610b15565b50565b6033546001600160a01b031633146105665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f2565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6073546000908015610bd95780610b8b878761126e565b1115610bd95760405162461bcd60e51b815260206004820152601c60248201527f436f6c6c61746572616c20696e7075742065786365656473206361700000000060448201526064016104f2565b6000610be58686610cba565b90506000610bfc610bf6898961126e565b86610cba565b90506000610c0861095c565b9050610c3a670de0b6b3a7640000610c356002610c25868861126e565b610c2f919061124c565b84610e42565b610e5b565b9998505050505050505050565b600054610100900460ff16610cb25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104f2565b610566610e6b565b600081600003610ccc57506000610e3c565b600082610ce185670de0b6b3a7640000611235565b610ceb919061124c565b9050670de0b6b3a7640000811115610d455760405162461bcd60e51b815260206004820152601c60248201527f70657263656e74206261636b6564206f7574206f6620626f756e64730000000060448201526064016104f2565b6068548111610d9557610d8d606754670de0b6b3a764000083606654610d6b9190611235565b610d75919061124c565b610d7f919061126e565b670de0b6b3a7640000610e5b565b915050610e3c565b606c548111610df757606b5460ff1615610dda57610d8d606a54670de0b6b3a764000083606954610dc69190611235565b610dd0919061124c565b610d7f9190611281565b610d8d606a54670de0b6b3a764000083606954610d6b9190611235565b606f5460ff1615610e1f57610d8d606e54670de0b6b3a764000083606d54610dc69190611235565b610d8d606e54670de0b6b3a764000083606d54610d6b9190611235565b92915050565b600081831115610e525782610e54565b815b9392505050565b600081831015610e525782610e54565b600054610100900460ff16610ed65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104f2565b61056633610b15565b6000815180845260005b81811015610f0557602081850181015186830182015201610ee9565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e546020830184610edf565b600060208284031215610f4a57600080fd5b5035919050565b60008060408385031215610f6457600080fd5b50508035926020909101359150565b60008060008060808587031215610f8957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060008060006101208a8c031215610fda57600080fd5b893567ffffffffffffffff80821115610ff257600080fd5b818c0191508c601f83011261100657600080fd5b81358181111561101857611018610fa5565b604051601f8201601f19908116603f0116810190838211818310171561104057611040610fa5565b816040528281528f602084870101111561105957600080fd5b82602086016020830137600060209382018401529f918e01359e505060408d01359c60608101359c5060808101359b5060a08101359a5060c0810135995060e0810135985061010001359650945050505050565b6000602082840312156110bf57600080fd5b81356001600160a01b0381168114610e5457600080fd5b600181811c908216806110ea57607f821691505b60208210810361110a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561115a57600081815260208120601f850160051c810160208610156111375750805b601f850160051c820191505b8181101561115657828155600101611143565b5050505b505050565b815167ffffffffffffffff81111561117957611179610fa5565b61118d8161118784546110d6565b84611110565b602080601f8311600181146111c257600084156111aa5750858301515b600019600386901b1c1916600185901b178555611156565b600085815260208120601f198616915b828110156111f1578886015182559484019460019091019084016111d2565b508582101561120f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e3c57610e3c61121f565b60008261126957634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610e3c57610e3c61121f565b81810381811115610e3c57610e3c61121f565b60006101208083526112a88184018d610edf565b602084019b909b52505060408101979097526060870195909552608086019390935260a085019190915260c084015260e08301526101009091015291905056fea26469706673582212204aaf5fe14c2c101e785e77c914615cd53b6de40e78b0df8aba46503c6740d80c64736f6c63430008130033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063a0230b4f11610104578063ce405095116100a2578063e9b6190911610071578063e9b6190914610385578063ee4950021461038e578063f2cfd55114610397578063f2fde38b146103b257600080fd5b8063ce40509514610358578063d26e6aa414610361578063d33fa1fe14610369578063e98f61761461037257600080fd5b8063a77f92ff116100de578063a77f92ff14610320578063b34b408e14610329578063be1420231461033c578063c4d66de81461034557600080fd5b8063a0230b4f146102fa578063a0716db514610303578063a5bef6d81461031757600080fd5b80634b24ea471161017c57806373ddaef41161014b57806373ddaef4146102ba5780638da5cb5b146102cd57806391aa69ca146102de57806397498845146102e757600080fd5b80634b24ea47146102715780635de322e31461029c57806366b5ae1f146102a9578063715018a6146102b257600080fd5b8063158ef93e116101b8578063158ef93e146102295780632bf838c3146102485780632c3609a0146102515780633ab2fb2b1461026457600080fd5b806306fdde03146101df5780630add6ef2146101fd57806311cfe6a914610214575b600080fd5b6101e76103c5565b6040516101f49190610f25565b60405180910390f35b610206606a5481565b6040519081526020016101f4565b610227610222366004610f38565b610453565b005b6074546001600160a01b031615155b60405190151581526020016101f4565b610206606c5481565b61022761025f366004610f51565b61049c565b606f546102389060ff1681565b607454610284906001600160a01b031681565b6040516001600160a01b0390911681526020016101f4565b606b546102389060ff1681565b61020660715481565b610227610554565b6102066102c8366004610f73565b610568565b6033546001600160a01b0316610284565b61020660695481565b6102276102f5366004610f38565b61057f565b610206606d5481565b60745461023890600160a01b900460ff1681565b61020660735481565b61020660665481565b610227610337366004610fbb565b6105c8565b61020660725481565b6102276103533660046110ad565b6107dd565b61020660685481565b61020661095c565b61020660705481565b610206610380366004610f73565b6109b0565b610206606e5481565b61020660675481565b607254607154604080519283526020830191909152016101f4565b6102276103c03660046110ad565b610a2b565b606580546103d2906110d6565b80601f01602080910402602001604051908101604052809291908181526020018280546103fe906110d6565b801561044b5780601f106104205761010080835404028352916020019161044b565b820191906000526020600020905b81548152906001019060200180831161042e57829003601f168201915b505050505081565b61045b610abb565b60735460408051918252602082018390527f24399c5dc569ae6a84e4f1f5b920be8287c6b4641798200e4a061c7f0e5f104d910160405180910390a1607355565b6074546001600160a01b031633146104fb5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206d75737420626520636f6e74726f6c6c65720000000000000060448201526064015b60405180910390fd5b6072546071546040805192835260208301919091528101839052606081018290527f46260e4b1cf55abf72e8979ac735bccbb337ae91602223beefa84e215677d4a69060800160405180910390a1607291909155607155565b61055c610abb565b6105666000610b15565b565b600061057685858585610b74565b95945050505050565b610587610abb565b60705460408051918252602082018390527f174b6c5c9fb671a22fef882eb99be5ffda98949070adf83534f2ab1846078b85910160405180910390a1607055565b6105d0610abb565b828511156106205760405162461bcd60e51b815260206004820152601a60248201527f4375746f666673206d75737420626520696e6372656173696e6700000000000060448201526064016104f2565b606561062c8a8261115f565b50606688905560678790556069869055600087670de0b6b3a7640000610652888c611235565b61065c919061124c565b610666919061126e565b90506000670de0b6b3a764000061067d888a611235565b610687919061124c565b9050818111156106b057606b805460ff191660011790556106a88282611281565b606a556106be565b6106ba8183611281565b606a555b6068879055606d869055606a54670de0b6b3a76400006106de878b611235565b6106e8919061124c565b6106f2919061126e565b90506000670de0b6b3a76400006107098789611235565b610713919061124c565b90508181111561073c57606f805460ff191660011790556107348282611281565b606e5561074a565b6107468183611281565b606e555b606c86905560738590556070849055607480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517fd833f19f31456e9c8d409b98370fe385ee40472047f2b6c0d5decb3e20a21611906107c7908e908e908e908e908e908e908e908e908e90611294565b60405180910390a1505050505050505050505050565b600054610100900460ff16158080156107fd5750600054600160ff909116105b806108175750303b158015610817575060005460ff166001145b6108895760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104f2565b6000805460ff1916600117905580156108ac576000805461ff0019166101001790555b6108b4610c47565b6074805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040519081527f42a456866a0731114133c0b0a1ac4c629e13e3c9eee0aa94fc6f96ad93c362d69060200160405180910390a18015610958576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6000806071544261096d9190611281565b6070549091508082116109a75780826072546109899190611235565b610993919061124c565b6072546109a09190611281565b9250505090565b60009250505090565b6074546000906001600160a01b03163314610a0d5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c7920636f6e74726f6c6c65722063616e2075706461746520666565000060448201526064016104f2565b610a1985858585610b74565b42607155607281905595945050505050565b610a33610abb565b6001600160a01b038116610aaf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104f2565b610ab881610b15565b50565b6033546001600160a01b031633146105665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f2565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6073546000908015610bd95780610b8b878761126e565b1115610bd95760405162461bcd60e51b815260206004820152601c60248201527f436f6c6c61746572616c20696e7075742065786365656473206361700000000060448201526064016104f2565b6000610be58686610cba565b90506000610bfc610bf6898961126e565b86610cba565b90506000610c0861095c565b9050610c3a670de0b6b3a7640000610c356002610c25868861126e565b610c2f919061124c565b84610e42565b610e5b565b9998505050505050505050565b600054610100900460ff16610cb25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104f2565b610566610e6b565b600081600003610ccc57506000610e3c565b600082610ce185670de0b6b3a7640000611235565b610ceb919061124c565b9050670de0b6b3a7640000811115610d455760405162461bcd60e51b815260206004820152601c60248201527f70657263656e74206261636b6564206f7574206f6620626f756e64730000000060448201526064016104f2565b6068548111610d9557610d8d606754670de0b6b3a764000083606654610d6b9190611235565b610d75919061124c565b610d7f919061126e565b670de0b6b3a7640000610e5b565b915050610e3c565b606c548111610df757606b5460ff1615610dda57610d8d606a54670de0b6b3a764000083606954610dc69190611235565b610dd0919061124c565b610d7f9190611281565b610d8d606a54670de0b6b3a764000083606954610d6b9190611235565b606f5460ff1615610e1f57610d8d606e54670de0b6b3a764000083606d54610dc69190611235565b610d8d606e54670de0b6b3a764000083606d54610d6b9190611235565b92915050565b600081831115610e525782610e54565b815b9392505050565b600081831015610e525782610e54565b600054610100900460ff16610ed65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104f2565b61056633610b15565b6000815180845260005b81811015610f0557602081850181015186830182015201610ee9565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e546020830184610edf565b600060208284031215610f4a57600080fd5b5035919050565b60008060408385031215610f6457600080fd5b50508035926020909101359150565b60008060008060808587031215610f8957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060008060006101208a8c031215610fda57600080fd5b893567ffffffffffffffff80821115610ff257600080fd5b818c0191508c601f83011261100657600080fd5b81358181111561101857611018610fa5565b604051601f8201601f19908116603f0116810190838211818310171561104057611040610fa5565b816040528281528f602084870101111561105957600080fd5b82602086016020830137600060209382018401529f918e01359e505060408d01359c60608101359c5060808101359b5060a08101359a5060c0810135995060e0810135985061010001359650945050505050565b6000602082840312156110bf57600080fd5b81356001600160a01b0381168114610e5457600080fd5b600181811c908216806110ea57607f821691505b60208210810361110a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561115a57600081815260208120601f850160051c810160208610156111375750805b601f850160051c820191505b8181101561115657828155600101611143565b5050505b505050565b815167ffffffffffffffff81111561117957611179610fa5565b61118d8161118784546110d6565b84611110565b602080601f8311600181146111c257600084156111aa5750858301515b600019600386901b1c1916600185901b178555611156565b600085815260208120601f198616915b828110156111f1578886015182559484019460019091019084016111d2565b508582101561120f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e3c57610e3c61121f565b60008261126957634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610e3c57610e3c61121f565b81810381811115610e3c57610e3c61121f565b60006101208083526112a88184018d610edf565b602084019b909b52505060408101979097526060870195909552608086019390935260a085019190915260c084015260e08301526101009091015291905056fea26469706673582212204aaf5fe14c2c101e785e77c914615cd53b6de40e78b0df8aba46503c6740d80c64736f6c63430008130033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
