{
  "_format": "hh-sol-artifact-1",
  "contractName": "UpgradeableFeeDiscountPluginTest",
  "sourceName": "contracts/test/UpgradeableFeeDiscountPluginTest.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_pluginFactory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_feeDiscountImplementation",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ConnectorDelegatecallFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyAdministrator",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyPluginFactory",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyPool",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "transferFailed",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "registry",
          "type": "address"
        }
      ],
      "name": "FeeDiscountRegistry",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ALGEBRA_BASE_PLUGIN_MANAGER",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "POOL_ADDRESS_OFFSET",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "afterFlash",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "",
          "type": "uint160"
        },
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "name": "afterInitialize",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        },
        {
          "internalType": "int128",
          "name": "",
          "type": "int128"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "afterModifyPosition",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        },
        {
          "internalType": "uint160",
          "name": "",
          "type": "uint160"
        },
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "afterSwap",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "beforeFlash",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "",
          "type": "uint160"
        }
      ],
      "name": "beforeInitialize",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        },
        {
          "internalType": "int128",
          "name": "",
          "type": "int128"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "beforeModifyPosition",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        },
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        },
        {
          "internalType": "uint160",
          "name": "",
          "type": "uint160"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "beforeSwap",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        },
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        },
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "collectPluginFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultPluginConfig",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeDiscountRegistry",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getActiveModuleNames",
      "outputs": [
        {
          "internalType": "string[]",
          "name": "moduleNames",
          "type": "string[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "handlePluginFee",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_feeDiscountRegistry",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pluginFactory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "registry",
          "type": "address"
        }
      ],
      "name": "setFeeDiscountRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60e06040523480156200001157600080fd5b50604051620019073803806200190783398101604081905262000034916200014a565b6001600160a01b03808416608052821660a052808383620000546200006c565b50506001600160a01b031660c0525062000194915050565b600054610100900460ff1615620000d95760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200012b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b03811681146200014557600080fd5b919050565b6000806000606084860312156200016057600080fd5b6200016b846200012d565b92506200017b602085016200012d565b91506200018b604085016200012d565b90509250925092565b60805160a05160c051611727620001e0600039600081816108df01528181610b610152610c430152600081816103b4015261061901526000818161037a0152610de501526117276000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80638de0a8ee116100cd578063c45a015511610081578063e2a1bd5911610066578063e2a1bd59146103af578063e72c652d146103d6578063f20cdc1a146103e957600080fd5b8063c45a015514610375578063d68520101461039c57600080fd5b8063aa6b14bb116100b2578063aa6b14bb1461033a578063b6f78cc91461034d578063c3da79781461036257600080fd5b80638de0a8ee146103145780639cb5a9631461032757600080fd5b8063485cc95511610124578063636fd80411610109578063636fd804146102df578063689ea370146102f257806382dd65221461030157600080fd5b8063485cc9551461027b5780635e2411b21461029057600080fd5b806331b25d1a1161015557806331b25d1a146101fa578063343d37ff1461022f57806336badf631461027357600080fd5b8063029c1cb71461017157806316f0115b146101cd575b600080fd5b61018461017f3660046110ab565b610426565b604080517fffffffff00000000000000000000000000000000000000000000000000000000909416845262ffffff92831660208501529116908201526060015b60405180910390f35b6101d5610491565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c4565b6102217f8e8000aba5b365c0be9685da1153f7f096e76d1ecfb42c050ae1e387aa65b4f581565b6040519081526020016101c4565b61024261023d366004611155565b6104a0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101c4565b610221604b81565b61028e6102893660046111c4565b6104d8565b005b6102a361029e366004611223565b6106e1565b604080517fffffffff00000000000000000000000000000000000000000000000000000000909316835262ffffff9091166020830152016101c4565b6102426102ed3660046111c4565b61071d565b604051600181526020016101c4565b61024261030f3660046112c2565b610759565b61024261032236600461130d565b61078c565b610242610335366004611389565b6107c2565b610242610348366004611437565b6107fb565b61035561082d565b6040516101c4919061147d565b61028e610370366004611533565b6108b2565b6101d57f000000000000000000000000000000000000000000000000000000000000000081565b6102426103aa366004611557565b6109ca565b6101d57f000000000000000000000000000000000000000000000000000000000000000081565b61028e6103e43660046115bf565b610a03565b7fb52f6c388bc01f052495924fd2facf0f81baeac5975b25912d0279719977d3005473ffffffffffffffffffffffffffffffffffffffff166101d5565b6000806000610433610a16565b600061043d610a84565b5092505050600061045a8d610450610b10565b8461ffff16610b24565b7f029c1cb7000000000000000000000000000000000000000000000000000000009e909d5060009c509a5050505050505050505050565b600061049b610b10565b905090565b60006104aa610a16565b507f343d37ff0000000000000000000000000000000000000000000000000000000098975050505050505050565b600054610100900460ff16158080156104f85750600054600160ff909116105b806105125750303b158015610512575060005460ff166001145b6105a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561060157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610670576040517f504d572800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61067982610c1e565b80156106dc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000806106ec610a16565b507f5e2411b20000000000000000000000000000000000000000000000000000000098600098509650505050505050565b6000610727610a16565b6107316001610ce5565b507f636fd8040000000000000000000000000000000000000000000000000000000092915050565b6000610763610a16565b507f82dd6522000000000000000000000000000000000000000000000000000000009392505050565b6000610796610a16565b507f8de0a8ee000000000000000000000000000000000000000000000000000000009695505050505050565b60006107cc610a16565b507f9cb5a963000000000000000000000000000000000000000000000000000000009998505050505050505050565b6000610805610a16565b507faa6b14bb0000000000000000000000000000000000000000000000000000000092915050565b604080516001808252818301909252606091816020015b60608152602001906001900390816108445790505090506040518060400160405280601381526020017f46656520446973636f756e7420506c7567696e00000000000000000000000000815250816000815181106108a4576108a46115f6565b602002602001018190525090565b6108ba610d91565b60405173ffffffffffffffffffffffffffffffffffffffff8216602482015261097d907f000000000000000000000000000000000000000000000000000000000000000090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc3da797800000000000000000000000000000000000000000000000000000000179052610ecb565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527f3b1f0d57f07483280d598ef402c5b2b96be1a42e65b21992bdafea3476b653279060200160405180910390a150565b60006109d4610a16565b507fd6852010000000000000000000000000000000000000000000000000000000009998505050505050505050565b610a0b610d91565b6106dc838284610f86565b610a1e610b10565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a82576040517f4b60273500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600080600080610a92610b10565b73ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611637565b5093989297509095509350915050565b6000806040516020604b82303c5192915050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015262ffffff821660648201526000908190610bff907f000000000000000000000000000000000000000000000000000000000000000090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1018860c00000000000000000000000000000000000000000000000000000000179052610ecb565b905080806020019051810190610c1591906116bc565b95945050505050565b60405173ffffffffffffffffffffffffffffffffffffffff82166024820152610ce1907f000000000000000000000000000000000000000000000000000000000000000090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9dd77e700000000000000000000000000000000000000000000000000000000179052610ecb565b5050565b6000610cef610a84565b93505050508160ff168160ff1614610ce157610d09610b10565b6040517fbca57f8100000000000000000000000000000000000000000000000000000000815260ff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063bca57f8190602401600060405180830381600087803b158015610d7557600080fd5b505af1158015610d89573d6000803e3d6000fd5b505050505050565b6040517fe8ae2b690000000000000000000000000000000000000000000000000000000081527f8e8000aba5b365c0be9685da1153f7f096e76d1ecfb42c050ae1e387aa65b4f560048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e8ae2b6990604401602060405180830381865afa158015610e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6591906116e1565b610a82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a6564000000000000000000000000000000000000604482015260640161059a565b606060008373ffffffffffffffffffffffffffffffffffffffff1683604051610ef491906116fe565b600060405180830381855af49150503d8060008114610f2f576040519150601f19603f3d011682016040523d82523d6000602084013e610f34565b606091505b509250905080610f7f57815115610f4d57815182602001fd5b6040517f7047373200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5092915050565b60006040517fa9059cbb0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045282602452602060006044600080895af19150813d1560203d146001600051141617169150806040525080611029576040517fe465903e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461105157600080fd5b50565b801515811461105157600080fd5b60008083601f84011261107457600080fd5b50813567ffffffffffffffff81111561108c57600080fd5b6020830191508360208285010111156110a457600080fd5b9250929050565b60008060008060008060008060e0898b0312156110c757600080fd5b88356110d28161102f565b975060208901356110e28161102f565b965060408901356110f281611054565b95506060890135945060808901356111098161102f565b935060a089013561111981611054565b925060c089013567ffffffffffffffff81111561113557600080fd5b6111418b828c01611062565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b03121561117157600080fd5b883561117c8161102f565b9750602089013561118c8161102f565b965060408901359550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561113557600080fd5b600080604083850312156111d757600080fd5b82356111e28161102f565b915060208301356111f28161102f565b809150509250929050565b8060020b811461105157600080fd5b8035600f81900b811461121e57600080fd5b919050565b600080600080600080600060c0888a03121561123e57600080fd5b87356112498161102f565b965060208801356112598161102f565b95506040880135611269816111fd565b94506060880135611279816111fd565b93506112876080890161120c565b925060a088013567ffffffffffffffff8111156112a357600080fd5b6112af8a828b01611062565b989b979a50959850939692959293505050565b6000806000606084860312156112d757600080fd5b83356112e28161102f565b925060208401356112f28161102f565b91506040840135611302816111fd565b809150509250925092565b60008060008060008060a0878903121561132657600080fd5b86356113318161102f565b955060208701356113418161102f565b94506040870135935060608701359250608087013567ffffffffffffffff81111561136b57600080fd5b61137789828a01611062565b979a9699509497509295939492505050565b60008060008060008060008060006101008a8c0312156113a857600080fd5b89356113b38161102f565b985060208a01356113c38161102f565b975060408a01356113d381611054565b965060608a0135955060808a01356113ea8161102f565b945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561141457600080fd5b6114208c828d01611062565b915080935050809150509295985092959850929598565b6000806040838503121561144a57600080fd5b50508035926020909101359150565b60005b8381101561147457818101518382015260200161145c565b50506000910152565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611526577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815180518087526114e9818989018a8501611459565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016959095018601945092850192908501906001016114a4565b5092979650505050505050565b60006020828403121561154557600080fd5b81356115508161102f565b9392505050565b60008060008060008060008060006101008a8c03121561157657600080fd5b89356115818161102f565b985060208a01356115918161102f565b975060408a01356115a1816111fd565b965060608a01356115b1816111fd565b95506113ea60808b0161120c565b6000806000606084860312156115d457600080fd5b83356115df8161102f565b92506020840135915060408401356113028161102f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805161ffff8116811461121e57600080fd5b60008060008060008060c0878903121561165057600080fd5b865161165b8161102f565b602088015190965061166c816111fd565b945061167a60408801611625565b9350606087015160ff8116811461169057600080fd5b925061169e60808801611625565b915060a08701516116ae81611054565b809150509295509295509295565b6000602082840312156116ce57600080fd5b815162ffffff8116811461155057600080fd5b6000602082840312156116f357600080fd5b815161155081611054565b60008251611710818460208701611459565b919091019291505056fea164736f6c6343000814000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c80638de0a8ee116100cd578063c45a015511610081578063e2a1bd5911610066578063e2a1bd59146103af578063e72c652d146103d6578063f20cdc1a146103e957600080fd5b8063c45a015514610375578063d68520101461039c57600080fd5b8063aa6b14bb116100b2578063aa6b14bb1461033a578063b6f78cc91461034d578063c3da79781461036257600080fd5b80638de0a8ee146103145780639cb5a9631461032757600080fd5b8063485cc95511610124578063636fd80411610109578063636fd804146102df578063689ea370146102f257806382dd65221461030157600080fd5b8063485cc9551461027b5780635e2411b21461029057600080fd5b806331b25d1a1161015557806331b25d1a146101fa578063343d37ff1461022f57806336badf631461027357600080fd5b8063029c1cb71461017157806316f0115b146101cd575b600080fd5b61018461017f3660046110ab565b610426565b604080517fffffffff00000000000000000000000000000000000000000000000000000000909416845262ffffff92831660208501529116908201526060015b60405180910390f35b6101d5610491565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c4565b6102217f8e8000aba5b365c0be9685da1153f7f096e76d1ecfb42c050ae1e387aa65b4f581565b6040519081526020016101c4565b61024261023d366004611155565b6104a0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101c4565b610221604b81565b61028e6102893660046111c4565b6104d8565b005b6102a361029e366004611223565b6106e1565b604080517fffffffff00000000000000000000000000000000000000000000000000000000909316835262ffffff9091166020830152016101c4565b6102426102ed3660046111c4565b61071d565b604051600181526020016101c4565b61024261030f3660046112c2565b610759565b61024261032236600461130d565b61078c565b610242610335366004611389565b6107c2565b610242610348366004611437565b6107fb565b61035561082d565b6040516101c4919061147d565b61028e610370366004611533565b6108b2565b6101d57f000000000000000000000000000000000000000000000000000000000000000081565b6102426103aa366004611557565b6109ca565b6101d57f000000000000000000000000000000000000000000000000000000000000000081565b61028e6103e43660046115bf565b610a03565b7fb52f6c388bc01f052495924fd2facf0f81baeac5975b25912d0279719977d3005473ffffffffffffffffffffffffffffffffffffffff166101d5565b6000806000610433610a16565b600061043d610a84565b5092505050600061045a8d610450610b10565b8461ffff16610b24565b7f029c1cb7000000000000000000000000000000000000000000000000000000009e909d5060009c509a5050505050505050505050565b600061049b610b10565b905090565b60006104aa610a16565b507f343d37ff0000000000000000000000000000000000000000000000000000000098975050505050505050565b600054610100900460ff16158080156104f85750600054600160ff909116105b806105125750303b158015610512575060005460ff166001145b6105a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561060157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610670576040517f504d572800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61067982610c1e565b80156106dc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000806106ec610a16565b507f5e2411b20000000000000000000000000000000000000000000000000000000098600098509650505050505050565b6000610727610a16565b6107316001610ce5565b507f636fd8040000000000000000000000000000000000000000000000000000000092915050565b6000610763610a16565b507f82dd6522000000000000000000000000000000000000000000000000000000009392505050565b6000610796610a16565b507f8de0a8ee000000000000000000000000000000000000000000000000000000009695505050505050565b60006107cc610a16565b507f9cb5a963000000000000000000000000000000000000000000000000000000009998505050505050505050565b6000610805610a16565b507faa6b14bb0000000000000000000000000000000000000000000000000000000092915050565b604080516001808252818301909252606091816020015b60608152602001906001900390816108445790505090506040518060400160405280601381526020017f46656520446973636f756e7420506c7567696e00000000000000000000000000815250816000815181106108a4576108a46115f6565b602002602001018190525090565b6108ba610d91565b60405173ffffffffffffffffffffffffffffffffffffffff8216602482015261097d907f000000000000000000000000000000000000000000000000000000000000000090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc3da797800000000000000000000000000000000000000000000000000000000179052610ecb565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527f3b1f0d57f07483280d598ef402c5b2b96be1a42e65b21992bdafea3476b653279060200160405180910390a150565b60006109d4610a16565b507fd6852010000000000000000000000000000000000000000000000000000000009998505050505050505050565b610a0b610d91565b6106dc838284610f86565b610a1e610b10565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a82576040517f4b60273500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600080600080610a92610b10565b73ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611637565b5093989297509095509350915050565b6000806040516020604b82303c5192915050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015262ffffff821660648201526000908190610bff907f000000000000000000000000000000000000000000000000000000000000000090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1018860c00000000000000000000000000000000000000000000000000000000179052610ecb565b905080806020019051810190610c1591906116bc565b95945050505050565b60405173ffffffffffffffffffffffffffffffffffffffff82166024820152610ce1907f000000000000000000000000000000000000000000000000000000000000000090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9dd77e700000000000000000000000000000000000000000000000000000000179052610ecb565b5050565b6000610cef610a84565b93505050508160ff168160ff1614610ce157610d09610b10565b6040517fbca57f8100000000000000000000000000000000000000000000000000000000815260ff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063bca57f8190602401600060405180830381600087803b158015610d7557600080fd5b505af1158015610d89573d6000803e3d6000fd5b505050505050565b6040517fe8ae2b690000000000000000000000000000000000000000000000000000000081527f8e8000aba5b365c0be9685da1153f7f096e76d1ecfb42c050ae1e387aa65b4f560048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e8ae2b6990604401602060405180830381865afa158015610e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6591906116e1565b610a82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a6564000000000000000000000000000000000000604482015260640161059a565b606060008373ffffffffffffffffffffffffffffffffffffffff1683604051610ef491906116fe565b600060405180830381855af49150503d8060008114610f2f576040519150601f19603f3d011682016040523d82523d6000602084013e610f34565b606091505b509250905080610f7f57815115610f4d57815182602001fd5b6040517f7047373200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5092915050565b60006040517fa9059cbb0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045282602452602060006044600080895af19150813d1560203d146001600051141617169150806040525080611029576040517fe465903e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461105157600080fd5b50565b801515811461105157600080fd5b60008083601f84011261107457600080fd5b50813567ffffffffffffffff81111561108c57600080fd5b6020830191508360208285010111156110a457600080fd5b9250929050565b60008060008060008060008060e0898b0312156110c757600080fd5b88356110d28161102f565b975060208901356110e28161102f565b965060408901356110f281611054565b95506060890135945060808901356111098161102f565b935060a089013561111981611054565b925060c089013567ffffffffffffffff81111561113557600080fd5b6111418b828c01611062565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b03121561117157600080fd5b883561117c8161102f565b9750602089013561118c8161102f565b965060408901359550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561113557600080fd5b600080604083850312156111d757600080fd5b82356111e28161102f565b915060208301356111f28161102f565b809150509250929050565b8060020b811461105157600080fd5b8035600f81900b811461121e57600080fd5b919050565b600080600080600080600060c0888a03121561123e57600080fd5b87356112498161102f565b965060208801356112598161102f565b95506040880135611269816111fd565b94506060880135611279816111fd565b93506112876080890161120c565b925060a088013567ffffffffffffffff8111156112a357600080fd5b6112af8a828b01611062565b989b979a50959850939692959293505050565b6000806000606084860312156112d757600080fd5b83356112e28161102f565b925060208401356112f28161102f565b91506040840135611302816111fd565b809150509250925092565b60008060008060008060a0878903121561132657600080fd5b86356113318161102f565b955060208701356113418161102f565b94506040870135935060608701359250608087013567ffffffffffffffff81111561136b57600080fd5b61137789828a01611062565b979a9699509497509295939492505050565b60008060008060008060008060006101008a8c0312156113a857600080fd5b89356113b38161102f565b985060208a01356113c38161102f565b975060408a01356113d381611054565b965060608a0135955060808a01356113ea8161102f565b945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561141457600080fd5b6114208c828d01611062565b915080935050809150509295985092959850929598565b6000806040838503121561144a57600080fd5b50508035926020909101359150565b60005b8381101561147457818101518382015260200161145c565b50506000910152565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611526577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815180518087526114e9818989018a8501611459565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016959095018601945092850192908501906001016114a4565b5092979650505050505050565b60006020828403121561154557600080fd5b81356115508161102f565b9392505050565b60008060008060008060008060006101008a8c03121561157657600080fd5b89356115818161102f565b985060208a01356115918161102f565b975060408a01356115a1816111fd565b965060608a01356115b1816111fd565b95506113ea60808b0161120c565b6000806000606084860312156115d457600080fd5b83356115df8161102f565b92506020840135915060408401356113028161102f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805161ffff8116811461121e57600080fd5b60008060008060008060c0878903121561165057600080fd5b865161165b8161102f565b602088015190965061166c816111fd565b945061167a60408801611625565b9350606087015160ff8116811461169057600080fd5b925061169e60808801611625565b915060a08701516116ae81611054565b809150509295509295509295565b6000602082840312156116ce57600080fd5b815162ffffff8116811461155057600080fd5b6000602082840312156116f357600080fd5b815161155081611054565b60008251611710818460208701611459565b919091019291505056fea164736f6c6343000814000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
