{
  "address": "0x26F70E5fA46aD10DF9d43ba469cfAbC79B073a01",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IController",
          "name": "_controller",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "versions",
          "type": "uint256[]"
        }
      ],
      "name": "atVersions",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "version",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            },
            {
              "internalType": "Fixed18",
              "name": "price",
              "type": "int256"
            }
          ],
          "internalType": "struct IOracleProvider.OracleVersion[]",
          "name": "prices",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "collateral",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "collateral",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "collateral",
      "outputs": [
        {
          "internalType": "contract ICollateral",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "internalType": "contract IController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "dailyRate",
      "outputs": [
        {
          "internalType": "Fixed18",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "exposure",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "fees",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "fees",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "protocolFees",
          "type": "uint256"
        },
        {
          "internalType": "UFixed18",
          "name": "productFees",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "globalPosition",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "oracleVersion",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "openPosition",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "closePosition",
              "type": "tuple"
            }
          ],
          "internalType": "struct PrePosition",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "UFixed18",
              "name": "maker",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "taker",
              "type": "uint256"
            }
          ],
          "internalType": "struct Position",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "info",
      "outputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "symbol",
              "type": "string"
            },
            {
              "components": [
                {
                  "internalType": "enum PayoffDefinitionLib.PayoffType",
                  "name": "payoffType",
                  "type": "uint8"
                },
                {
                  "internalType": "enum PayoffDefinitionLib.PayoffDirection",
                  "name": "payoffDirection",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes30",
                  "name": "data",
                  "type": "bytes30"
                }
              ],
              "internalType": "struct PayoffDefinition",
              "name": "payoffDefinition",
              "type": "tuple"
            },
            {
              "internalType": "contract IOracleProvider",
              "name": "oracle",
              "type": "address"
            },
            {
              "internalType": "UFixed18",
              "name": "maintenance",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "fundingFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "makerFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "takerFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "positionFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "makerLimit",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "PackedFixed18",
                  "name": "minRate",
                  "type": "int128"
                },
                {
                  "internalType": "PackedFixed18",
                  "name": "maxRate",
                  "type": "int128"
                },
                {
                  "internalType": "PackedFixed18",
                  "name": "targetRate",
                  "type": "int128"
                },
                {
                  "internalType": "PackedUFixed18",
                  "name": "targetUtilization",
                  "type": "uint128"
                }
              ],
              "internalType": "struct JumpRateUtilizationCurve",
              "name": "utilizationCurve",
              "type": "tuple"
            }
          ],
          "internalType": "struct IProduct.ProductInfo",
          "name": "_info",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "latestVersion",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "version",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            },
            {
              "internalType": "Fixed18",
              "name": "price",
              "type": "int256"
            }
          ],
          "internalType": "struct IOracleProvider.OracleVersion",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "liquidatable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "liquidating",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "maintenance",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        },
        {
          "internalType": "UFixed18",
          "name": "positionSize",
          "type": "uint256"
        }
      ],
      "name": "maintenanceRequired",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "openInterest",
      "outputs": [
        {
          "components": [
            {
              "internalType": "UFixed18",
              "name": "maker",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "taker",
              "type": "uint256"
            }
          ],
          "internalType": "struct Position",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "openInterest",
      "outputs": [
        {
          "components": [
            {
              "internalType": "UFixed18",
              "name": "maker",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "taker",
              "type": "uint256"
            }
          ],
          "internalType": "struct Position",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "position",
      "outputs": [
        {
          "components": [
            {
              "internalType": "UFixed18",
              "name": "maker",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "taker",
              "type": "uint256"
            }
          ],
          "internalType": "struct Position",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "position",
      "outputs": [
        {
          "components": [
            {
              "internalType": "UFixed18",
              "name": "maker",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "taker",
              "type": "uint256"
            }
          ],
          "internalType": "struct Position",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "pre",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "oracleVersion",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "openPosition",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "closePosition",
              "type": "tuple"
            }
          ],
          "internalType": "struct PrePosition",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "pre",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "oracleVersion",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "openPosition",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "closePosition",
              "type": "tuple"
            }
          ],
          "internalType": "struct PrePosition",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "rate",
      "outputs": [
        {
          "internalType": "Fixed18",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "shortfall",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "snapshot",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "productAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "userAddress",
              "type": "address"
            },
            {
              "internalType": "UFixed18",
              "name": "collateral",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "maintenance",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "oracleVersion",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "UFixed18",
                      "name": "maker",
                      "type": "uint256"
                    },
                    {
                      "internalType": "UFixed18",
                      "name": "taker",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct Position",
                  "name": "openPosition",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "UFixed18",
                      "name": "maker",
                      "type": "uint256"
                    },
                    {
                      "internalType": "UFixed18",
                      "name": "taker",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct Position",
                  "name": "closePosition",
                  "type": "tuple"
                }
              ],
              "internalType": "struct PrePosition",
              "name": "pre",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "position",
              "type": "tuple"
            },
            {
              "internalType": "bool",
              "name": "liquidatable",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "liquidating",
              "type": "bool"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "openInterest",
              "type": "tuple"
            },
            {
              "internalType": "UFixed18",
              "name": "fees",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "exposure",
              "type": "uint256"
            }
          ],
          "internalType": "struct IPerennialLens.UserProductSnapshot",
          "name": "_snapshot",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "snapshot",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "components": [
                    {
                      "internalType": "enum PayoffDefinitionLib.PayoffType",
                      "name": "payoffType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "enum PayoffDefinitionLib.PayoffDirection",
                      "name": "payoffDirection",
                      "type": "uint8"
                    },
                    {
                      "internalType": "bytes30",
                      "name": "data",
                      "type": "bytes30"
                    }
                  ],
                  "internalType": "struct PayoffDefinition",
                  "name": "payoffDefinition",
                  "type": "tuple"
                },
                {
                  "internalType": "contract IOracleProvider",
                  "name": "oracle",
                  "type": "address"
                },
                {
                  "internalType": "UFixed18",
                  "name": "maintenance",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "fundingFee",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "makerFee",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "takerFee",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "positionFee",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "makerLimit",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "PackedFixed18",
                      "name": "minRate",
                      "type": "int128"
                    },
                    {
                      "internalType": "PackedFixed18",
                      "name": "maxRate",
                      "type": "int128"
                    },
                    {
                      "internalType": "PackedFixed18",
                      "name": "targetRate",
                      "type": "int128"
                    },
                    {
                      "internalType": "PackedUFixed18",
                      "name": "targetUtilization",
                      "type": "uint128"
                    }
                  ],
                  "internalType": "struct JumpRateUtilizationCurve",
                  "name": "utilizationCurve",
                  "type": "tuple"
                }
              ],
              "internalType": "struct IProduct.ProductInfo",
              "name": "productInfo",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "productAddress",
              "type": "address"
            },
            {
              "internalType": "Fixed18",
              "name": "rate",
              "type": "int256"
            },
            {
              "internalType": "Fixed18",
              "name": "dailyRate",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "version",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "timestamp",
                  "type": "uint256"
                },
                {
                  "internalType": "Fixed18",
                  "name": "price",
                  "type": "int256"
                }
              ],
              "internalType": "struct IOracleProvider.OracleVersion",
              "name": "latestVersion",
              "type": "tuple"
            },
            {
              "internalType": "UFixed18",
              "name": "maintenance",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "collateral",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "shortfall",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "oracleVersion",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "UFixed18",
                      "name": "maker",
                      "type": "uint256"
                    },
                    {
                      "internalType": "UFixed18",
                      "name": "taker",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct Position",
                  "name": "openPosition",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "UFixed18",
                      "name": "maker",
                      "type": "uint256"
                    },
                    {
                      "internalType": "UFixed18",
                      "name": "taker",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct Position",
                  "name": "closePosition",
                  "type": "tuple"
                }
              ],
              "internalType": "struct PrePosition",
              "name": "pre",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "position",
              "type": "tuple"
            },
            {
              "internalType": "UFixed18",
              "name": "productFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "protocolFee",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "openInterest",
              "type": "tuple"
            }
          ],
          "internalType": "struct IPerennialLens.ProductSnapshot",
          "name": "_snapshot",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "snapshot",
      "outputs": [
        {
          "components": [
            {
              "internalType": "contract ICollateral",
              "name": "collateral",
              "type": "address"
            },
            {
              "internalType": "contract IIncentivizer",
              "name": "incentivizer",
              "type": "address"
            },
            {
              "internalType": "Token18",
              "name": "collateralToken",
              "type": "address"
            },
            {
              "internalType": "UFixed18",
              "name": "protocolFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "liquidationFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "minCollateral",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "paused",
              "type": "bool"
            }
          ],
          "internalType": "struct IPerennialLens.ProtocolSnapshot",
          "name": "_snapshot",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct[]",
          "name": "productAddresses",
          "type": "address[]"
        }
      ],
      "name": "snapshots",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "productAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "userAddress",
              "type": "address"
            },
            {
              "internalType": "UFixed18",
              "name": "collateral",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "maintenance",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "oracleVersion",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "UFixed18",
                      "name": "maker",
                      "type": "uint256"
                    },
                    {
                      "internalType": "UFixed18",
                      "name": "taker",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct Position",
                  "name": "openPosition",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "UFixed18",
                      "name": "maker",
                      "type": "uint256"
                    },
                    {
                      "internalType": "UFixed18",
                      "name": "taker",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct Position",
                  "name": "closePosition",
                  "type": "tuple"
                }
              ],
              "internalType": "struct PrePosition",
              "name": "pre",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "position",
              "type": "tuple"
            },
            {
              "internalType": "bool",
              "name": "liquidatable",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "liquidating",
              "type": "bool"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "openInterest",
              "type": "tuple"
            },
            {
              "internalType": "UFixed18",
              "name": "fees",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "exposure",
              "type": "uint256"
            }
          ],
          "internalType": "struct IPerennialLens.UserProductSnapshot[]",
          "name": "_snapshots",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct[]",
          "name": "productAddresses",
          "type": "address[]"
        }
      ],
      "name": "snapshots",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "components": [
                    {
                      "internalType": "enum PayoffDefinitionLib.PayoffType",
                      "name": "payoffType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "enum PayoffDefinitionLib.PayoffDirection",
                      "name": "payoffDirection",
                      "type": "uint8"
                    },
                    {
                      "internalType": "bytes30",
                      "name": "data",
                      "type": "bytes30"
                    }
                  ],
                  "internalType": "struct PayoffDefinition",
                  "name": "payoffDefinition",
                  "type": "tuple"
                },
                {
                  "internalType": "contract IOracleProvider",
                  "name": "oracle",
                  "type": "address"
                },
                {
                  "internalType": "UFixed18",
                  "name": "maintenance",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "fundingFee",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "makerFee",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "takerFee",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "positionFee",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "makerLimit",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "PackedFixed18",
                      "name": "minRate",
                      "type": "int128"
                    },
                    {
                      "internalType": "PackedFixed18",
                      "name": "maxRate",
                      "type": "int128"
                    },
                    {
                      "internalType": "PackedFixed18",
                      "name": "targetRate",
                      "type": "int128"
                    },
                    {
                      "internalType": "PackedUFixed18",
                      "name": "targetUtilization",
                      "type": "uint128"
                    }
                  ],
                  "internalType": "struct JumpRateUtilizationCurve",
                  "name": "utilizationCurve",
                  "type": "tuple"
                }
              ],
              "internalType": "struct IProduct.ProductInfo",
              "name": "productInfo",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "productAddress",
              "type": "address"
            },
            {
              "internalType": "Fixed18",
              "name": "rate",
              "type": "int256"
            },
            {
              "internalType": "Fixed18",
              "name": "dailyRate",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "version",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "timestamp",
                  "type": "uint256"
                },
                {
                  "internalType": "Fixed18",
                  "name": "price",
                  "type": "int256"
                }
              ],
              "internalType": "struct IOracleProvider.OracleVersion",
              "name": "latestVersion",
              "type": "tuple"
            },
            {
              "internalType": "UFixed18",
              "name": "maintenance",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "collateral",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "shortfall",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "oracleVersion",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "UFixed18",
                      "name": "maker",
                      "type": "uint256"
                    },
                    {
                      "internalType": "UFixed18",
                      "name": "taker",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct Position",
                  "name": "openPosition",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "UFixed18",
                      "name": "maker",
                      "type": "uint256"
                    },
                    {
                      "internalType": "UFixed18",
                      "name": "taker",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct Position",
                  "name": "closePosition",
                  "type": "tuple"
                }
              ],
              "internalType": "struct PrePosition",
              "name": "pre",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "position",
              "type": "tuple"
            },
            {
              "internalType": "UFixed18",
              "name": "productFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "protocolFee",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "openInterest",
              "type": "tuple"
            }
          ],
          "internalType": "struct IPerennialLens.ProductSnapshot[]",
          "name": "_snapshots",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "unclaimedIncentiveRewards",
      "outputs": [
        {
          "internalType": "Token18[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "UFixed18[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "programIds",
          "type": "uint256[]"
        }
      ],
      "name": "unclaimedIncentiveRewards",
      "outputs": [
        {
          "internalType": "Token18[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "UFixed18[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "userPosition",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "oracleVersion",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "openPosition",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "UFixed18",
                  "name": "maker",
                  "type": "uint256"
                },
                {
                  "internalType": "UFixed18",
                  "name": "taker",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Position",
              "name": "closePosition",
              "type": "tuple"
            }
          ],
          "internalType": "struct PrePosition",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "UFixed18",
              "name": "maker",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "taker",
              "type": "uint256"
            }
          ],
          "internalType": "struct Position",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "transactionHash": "0xc7f2bc8dbfc37747e6dfc04274ba1bbe15b894fbb38c32a1d7883e2951ae8a14",
  "receipt": {
    "to": null,
    "from": "0x66a7fDB96C583c59597de16d8b2B989231415339",
    "contractAddress": "0x26F70E5fA46aD10DF9d43ba469cfAbC79B073a01",
    "transactionIndex": 135,
    "gasUsed": "3523227",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "blockHash": "0xa24b3464e3a7cc983d4a74ea07a2f6c3cad62e36901015b15926d7e62afd48fa",
    "transactionHash": "0xc7f2bc8dbfc37747e6dfc04274ba1bbe15b894fbb38c32a1d7883e2951ae8a14",
    "logs": [],
    "blockNumber": 16127904,
    "cumulativeGasUsed": "13943197",
    "status": 1,
    "byzantium": true
  },
  "args": ["0x9df509186b6d3b7D033359f94c8b1BB5544d51b3"],
  "numDeployments": 1,
  "solcInputHash": "da859e89e8a55679badb76fb81d9b4d3",
  "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IController\",\"name\":\"_controller\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"versions\",\"type\":\"uint256[]\"}],\"name\":\"atVersions\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"Fixed18\",\"name\":\"price\",\"type\":\"int256\"}],\"internalType\":\"struct IOracleProvider.OracleVersion[]\",\"name\":\"prices\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"collateral\",\"outputs\":[{\"internalType\":\"UFixed18\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"collateral\",\"outputs\":[{\"internalType\":\"UFixed18\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateral\",\"outputs\":[{\"internalType\":\"contract ICollateral\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controller\",\"outputs\":[{\"internalType\":\"contract IController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"dailyRate\",\"outputs\":[{\"internalType\":\"Fixed18\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"exposure\",\"outputs\":[{\"internalType\":\"UFixed18\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"fees\",\"outputs\":[{\"internalType\":\"UFixed18\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"fees\",\"outputs\":[{\"internalType\":\"UFixed18\",\"name\":\"protocolFees\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"productFees\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"globalPosition\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oracleVersion\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"openPosition\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"closePosition\",\"type\":\"tuple\"}],\"internalType\":\"struct PrePosition\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"info\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"enum PayoffDefinitionLib.PayoffType\",\"name\":\"payoffType\",\"type\":\"uint8\"},{\"internalType\":\"enum PayoffDefinitionLib.PayoffDirection\",\"name\":\"payoffDirection\",\"type\":\"uint8\"},{\"internalType\":\"bytes30\",\"name\":\"data\",\"type\":\"bytes30\"}],\"internalType\":\"struct PayoffDefinition\",\"name\":\"payoffDefinition\",\"type\":\"tuple\"},{\"internalType\":\"contract IOracleProvider\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"UFixed18\",\"name\":\"maintenance\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"fundingFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"makerFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"takerFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"positionFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"makerLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"PackedFixed18\",\"name\":\"minRate\",\"type\":\"int128\"},{\"internalType\":\"PackedFixed18\",\"name\":\"maxRate\",\"type\":\"int128\"},{\"internalType\":\"PackedFixed18\",\"name\":\"targetRate\",\"type\":\"int128\"},{\"internalType\":\"PackedUFixed18\",\"name\":\"targetUtilization\",\"type\":\"uint128\"}],\"internalType\":\"struct JumpRateUtilizationCurve\",\"name\":\"utilizationCurve\",\"type\":\"tuple\"}],\"internalType\":\"struct IProduct.ProductInfo\",\"name\":\"_info\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"latestVersion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"Fixed18\",\"name\":\"price\",\"type\":\"int256\"}],\"internalType\":\"struct IOracleProvider.OracleVersion\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"liquidatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"liquidating\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"maintenance\",\"outputs\":[{\"internalType\":\"UFixed18\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"},{\"internalType\":\"UFixed18\",\"name\":\"positionSize\",\"type\":\"uint256\"}],\"name\":\"maintenanceRequired\",\"outputs\":[{\"internalType\":\"UFixed18\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"openInterest\",\"outputs\":[{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"openInterest\",\"outputs\":[{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"position\",\"outputs\":[{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"position\",\"outputs\":[{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"pre\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oracleVersion\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"openPosition\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"closePosition\",\"type\":\"tuple\"}],\"internalType\":\"struct PrePosition\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"pre\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oracleVersion\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"openPosition\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"closePosition\",\"type\":\"tuple\"}],\"internalType\":\"struct PrePosition\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"rate\",\"outputs\":[{\"internalType\":\"Fixed18\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"shortfall\",\"outputs\":[{\"internalType\":\"UFixed18\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"snapshot\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"productAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"UFixed18\",\"name\":\"collateral\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"maintenance\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oracleVersion\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"openPosition\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"closePosition\",\"type\":\"tuple\"}],\"internalType\":\"struct PrePosition\",\"name\":\"pre\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"position\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"liquidatable\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"liquidating\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"openInterest\",\"type\":\"tuple\"},{\"internalType\":\"UFixed18\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"exposure\",\"type\":\"uint256\"}],\"internalType\":\"struct IPerennialLens.UserProductSnapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"snapshot\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"enum PayoffDefinitionLib.PayoffType\",\"name\":\"payoffType\",\"type\":\"uint8\"},{\"internalType\":\"enum PayoffDefinitionLib.PayoffDirection\",\"name\":\"payoffDirection\",\"type\":\"uint8\"},{\"internalType\":\"bytes30\",\"name\":\"data\",\"type\":\"bytes30\"}],\"internalType\":\"struct PayoffDefinition\",\"name\":\"payoffDefinition\",\"type\":\"tuple\"},{\"internalType\":\"contract IOracleProvider\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"UFixed18\",\"name\":\"maintenance\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"fundingFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"makerFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"takerFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"positionFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"makerLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"PackedFixed18\",\"name\":\"minRate\",\"type\":\"int128\"},{\"internalType\":\"PackedFixed18\",\"name\":\"maxRate\",\"type\":\"int128\"},{\"internalType\":\"PackedFixed18\",\"name\":\"targetRate\",\"type\":\"int128\"},{\"internalType\":\"PackedUFixed18\",\"name\":\"targetUtilization\",\"type\":\"uint128\"}],\"internalType\":\"struct JumpRateUtilizationCurve\",\"name\":\"utilizationCurve\",\"type\":\"tuple\"}],\"internalType\":\"struct IProduct.ProductInfo\",\"name\":\"productInfo\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"productAddress\",\"type\":\"address\"},{\"internalType\":\"Fixed18\",\"name\":\"rate\",\"type\":\"int256\"},{\"internalType\":\"Fixed18\",\"name\":\"dailyRate\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"Fixed18\",\"name\":\"price\",\"type\":\"int256\"}],\"internalType\":\"struct IOracleProvider.OracleVersion\",\"name\":\"latestVersion\",\"type\":\"tuple\"},{\"internalType\":\"UFixed18\",\"name\":\"maintenance\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"collateral\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"shortfall\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oracleVersion\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"openPosition\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"closePosition\",\"type\":\"tuple\"}],\"internalType\":\"struct PrePosition\",\"name\":\"pre\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"position\",\"type\":\"tuple\"},{\"internalType\":\"UFixed18\",\"name\":\"productFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"protocolFee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"openInterest\",\"type\":\"tuple\"}],\"internalType\":\"struct IPerennialLens.ProductSnapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"snapshot\",\"outputs\":[{\"components\":[{\"internalType\":\"contract ICollateral\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"contract IIncentivizer\",\"name\":\"incentivizer\",\"type\":\"address\"},{\"internalType\":\"Token18\",\"name\":\"collateralToken\",\"type\":\"address\"},{\"internalType\":\"UFixed18\",\"name\":\"protocolFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"liquidationFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"minCollateral\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"internalType\":\"struct IPerennialLens.ProtocolSnapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct[]\",\"name\":\"productAddresses\",\"type\":\"address[]\"}],\"name\":\"snapshots\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"productAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"UFixed18\",\"name\":\"collateral\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"maintenance\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oracleVersion\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"openPosition\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"closePosition\",\"type\":\"tuple\"}],\"internalType\":\"struct PrePosition\",\"name\":\"pre\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"position\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"liquidatable\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"liquidating\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"openInterest\",\"type\":\"tuple\"},{\"internalType\":\"UFixed18\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"exposure\",\"type\":\"uint256\"}],\"internalType\":\"struct IPerennialLens.UserProductSnapshot[]\",\"name\":\"_snapshots\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct[]\",\"name\":\"productAddresses\",\"type\":\"address[]\"}],\"name\":\"snapshots\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"enum PayoffDefinitionLib.PayoffType\",\"name\":\"payoffType\",\"type\":\"uint8\"},{\"internalType\":\"enum PayoffDefinitionLib.PayoffDirection\",\"name\":\"payoffDirection\",\"type\":\"uint8\"},{\"internalType\":\"bytes30\",\"name\":\"data\",\"type\":\"bytes30\"}],\"internalType\":\"struct PayoffDefinition\",\"name\":\"payoffDefinition\",\"type\":\"tuple\"},{\"internalType\":\"contract IOracleProvider\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"UFixed18\",\"name\":\"maintenance\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"fundingFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"makerFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"takerFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"positionFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"makerLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"PackedFixed18\",\"name\":\"minRate\",\"type\":\"int128\"},{\"internalType\":\"PackedFixed18\",\"name\":\"maxRate\",\"type\":\"int128\"},{\"internalType\":\"PackedFixed18\",\"name\":\"targetRate\",\"type\":\"int128\"},{\"internalType\":\"PackedUFixed18\",\"name\":\"targetUtilization\",\"type\":\"uint128\"}],\"internalType\":\"struct JumpRateUtilizationCurve\",\"name\":\"utilizationCurve\",\"type\":\"tuple\"}],\"internalType\":\"struct IProduct.ProductInfo\",\"name\":\"productInfo\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"productAddress\",\"type\":\"address\"},{\"internalType\":\"Fixed18\",\"name\":\"rate\",\"type\":\"int256\"},{\"internalType\":\"Fixed18\",\"name\":\"dailyRate\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"Fixed18\",\"name\":\"price\",\"type\":\"int256\"}],\"internalType\":\"struct IOracleProvider.OracleVersion\",\"name\":\"latestVersion\",\"type\":\"tuple\"},{\"internalType\":\"UFixed18\",\"name\":\"maintenance\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"collateral\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"shortfall\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oracleVersion\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"openPosition\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"closePosition\",\"type\":\"tuple\"}],\"internalType\":\"struct PrePosition\",\"name\":\"pre\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"position\",\"type\":\"tuple\"},{\"internalType\":\"UFixed18\",\"name\":\"productFee\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"protocolFee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"openInterest\",\"type\":\"tuple\"}],\"internalType\":\"struct IPerennialLens.ProductSnapshot[]\",\"name\":\"_snapshots\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"unclaimedIncentiveRewards\",\"outputs\":[{\"internalType\":\"Token18[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"UFixed18[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"programIds\",\"type\":\"uint256[]\"}],\"name\":\"unclaimedIncentiveRewards\",\"outputs\":[{\"internalType\":\"Token18[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"UFixed18[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract IProduct\",\"name\":\"product\",\"type\":\"address\"}],\"name\":\"userPosition\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oracleVersion\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"openPosition\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"closePosition\",\"type\":\"tuple\"}],\"internalType\":\"struct PrePosition\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"UFixed18\",\"name\":\"maker\",\"type\":\"uint256\"},{\"internalType\":\"UFixed18\",\"name\":\"taker\",\"type\":\"uint256\"}],\"internalType\":\"struct Position\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"atVersions(address,uint256[])\":{\"params\":{\"product\":\"Product address\",\"versions\":\"Oracle versions to query\"},\"returns\":{\"prices\":\"Product prices at specified versions\"}},\"collateral()\":{\"returns\":{\"_0\":\"Protocol collateral address\"}},\"collateral(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_0\":\"Total collateral for product\"}},\"collateral(address,address)\":{\"params\":{\"account\":\"Account address\",\"product\":\"Product address\"},\"returns\":{\"_0\":\"User deposited collateral for product\"}},\"constructor\":{\"params\":{\"_controller\":\"Protocol controller address\"}},\"dailyRate(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_0\":\"Product current funding extrapolated to a daily rate\"}},\"exposure(address,address)\":{\"params\":{\"account\":\"Account address\",\"product\":\"Product address\"},\"returns\":{\"_0\":\"User's exposure (openInterest * utilization) after settle\"}},\"fees(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"productFees\":\"fees accrued by the product owner\",\"protocolFees\":\"fees accrued by the protocol\"}},\"fees(address,address)\":{\"params\":{\"account\":\"Account address\",\"product\":\"Product address\"},\"returns\":{\"_0\":\"sum of all fees accrued by the account\"}},\"globalPosition(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_0\":\"Product pre-position\",\"_1\":\"Product position\"}},\"info(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_info\":\"of the product\"}},\"latestVersion(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_0\":\"Product latest price\"}},\"liquidatable(address,address)\":{\"params\":{\"account\":\"Account address\",\"product\":\"Product address\"},\"returns\":{\"_0\":\"Whether or not the user's position eligible to be liquidated\"}},\"liquidating(address,address)\":{\"params\":{\"account\":\"Account address\",\"product\":\"Product address\"},\"returns\":{\"_0\":\"Whether or not the user's position is being liquidated\"}},\"maintenance(address,address)\":{\"params\":{\"account\":\"Account address\",\"product\":\"Product address\"},\"returns\":{\"_0\":\"Maximum of user maintenance, and maintenanceNext\"}},\"maintenanceRequired(address,address,uint256)\":{\"params\":{\"account\":\"Account address\",\"positionSize\":\"size of position for maintenance calculation\",\"product\":\"Product address\"},\"returns\":{\"_0\":\"Maintenance required for position in product\"}},\"name(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_0\":\"Name of the product\"}},\"openInterest(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_0\":\"Product maker and taker position multiplied by latest price after settle\"}},\"openInterest(address,address)\":{\"params\":{\"account\":\"Account address\",\"product\":\"Product address\"},\"returns\":{\"_0\":\"User's maker or taker position multiplied by latest price after settle\"}},\"position(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_0\":\"product position\"}},\"position(address,address)\":{\"params\":{\"account\":\"Account address\",\"product\":\"Product address\"},\"returns\":{\"_0\":\"User position\"}},\"pre(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_0\":\"Product pre-position\"}},\"pre(address,address)\":{\"params\":{\"account\":\"Account address\",\"product\":\"Product address\"},\"returns\":{\"_0\":\"User pre-position\"}},\"rate(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_0\":\"Product current funding rate\"}},\"shortfall(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_0\":\"Total shortfall for product\"}},\"snapshot()\":{\"returns\":{\"_snapshot\":\"a snapshot of protocol values\"}},\"snapshot(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_snapshot\":\"for the product after settle\"}},\"snapshot(address,address)\":{\"params\":{\"account\":\"User addresses\",\"product\":\"Product address\"},\"returns\":{\"_snapshot\":\"UserSnapshot for the product after settle\"}},\"snapshots(address,address[])\":{\"params\":{\"account\":\"User addresses\",\"productAddresses\":\"Product addresses\"},\"returns\":{\"_snapshots\":\"UserSnapshot for each product after settle\"}},\"snapshots(address[])\":{\"params\":{\"productAddresses\":\"Product addresses\"},\"returns\":{\"_snapshots\":\"a snapshot for each product after settle\"}},\"symbol(address)\":{\"params\":{\"product\":\"Product address\"},\"returns\":{\"_0\":\"Symbol of the product\"}},\"unclaimedIncentiveRewards(address,address)\":{\"params\":{\"account\":\"Account address\",\"product\":\"Product address\"},\"returns\":{\"amounts\":\"Token amounts of unclaimed incentive rewards for given product\",\"tokens\":\"Token addresses of unclaimed incentive rewards for given product\"}},\"unclaimedIncentiveRewards(address,address,uint256[])\":{\"params\":{\"account\":\"Account address\",\"product\":\"Product address\",\"programIds\":\"Program IDs to query\"},\"returns\":{\"amounts\":\"Token amounts of unclaimed incentive rewards for given program IDs\",\"tokens\":\"Token addresses of unclaimed incentive rewards for given program IDs\"}},\"userPosition(address,address)\":{\"params\":{\"account\":\"Account address\",\"product\":\"Product address\"},\"returns\":{\"_0\":\"User pre-position\",\"_1\":\"User position\"}}},\"stateVariables\":{\"controller\":{\"return\":\"Protocol controller\",\"returns\":{\"_0\":\"Protocol controller\"}}},\"title\":\"Lens contract to conveniently pull protocol data\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"atVersions(address,uint256[])\":{\"notice\":\"Prices of product at specified versions after settle\"},\"collateral()\":{\"notice\":\"Protocol collateral address\"},\"collateral(address)\":{\"notice\":\"Product total collateral amount after settle\"},\"collateral(address,address)\":{\"notice\":\"User collateral amount for product after settle\"},\"controller()\":{\"notice\":\"Protocol controller\"},\"dailyRate(address)\":{\"notice\":\"Product funding extrapolated to a daily rate after settle\"},\"exposure(address,address)\":{\"notice\":\"User's exposure in product after settle\"},\"fees(address)\":{\"notice\":\"Fees accumulated by product and protocol treasuries after settle\"},\"fees(address,address)\":{\"notice\":\"Fees accumulated by account after settle\"},\"globalPosition(address)\":{\"notice\":\"Product pre-position and position after settle\"},\"info(address)\":{\"notice\":\"Returns the info of the provided `product`\"},\"latestVersion(address)\":{\"notice\":\"Current price of product after settle\"},\"liquidatable(address,address)\":{\"notice\":\"User liquidatble status for product after settle\"},\"liquidating(address,address)\":{\"notice\":\"User liquidating status for product after settle\"},\"maintenance(address,address)\":{\"notice\":\"User maintenance amount for product after settle\"},\"maintenanceRequired(address,address,uint256)\":{\"notice\":\"User's maintenance required for position size in product after settle\"},\"name(address)\":{\"notice\":\"Returns the name of the provided `product`\"},\"openInterest(address)\":{\"notice\":\"Product total open interest after settle\"},\"openInterest(address,address)\":{\"notice\":\"User's open interest in product after settle\"},\"position(address)\":{\"notice\":\"Product position after settle\"},\"position(address,address)\":{\"notice\":\"User position for product after settle\"},\"pre(address)\":{\"notice\":\"Product pre position after settle\"},\"pre(address,address)\":{\"notice\":\"User pre position for product after settle\"},\"rate(address)\":{\"notice\":\"Product funding rate after settle\"},\"shortfall(address)\":{\"notice\":\"Product total shortfall amount after settle\"},\"snapshot()\":{\"notice\":\"Returns the snapshot of the protocol\"},\"snapshot(address)\":{\"notice\":\"Returns the snapshot of the provided `product`\"},\"snapshot(address,address)\":{\"notice\":\"Returns the user snapshot for the provided `product`\"},\"snapshots(address,address[])\":{\"notice\":\"Returns the user snapshots for the provided `productAddresses`\"},\"snapshots(address[])\":{\"notice\":\"Returns the snapshots of the provided `productAddresses`\"},\"symbol(address)\":{\"notice\":\"Returns the symbol of the provided `product`\"},\"unclaimedIncentiveRewards(address,address)\":{\"notice\":\"User's unclaimed rewards for all programs for product after settle\"},\"unclaimedIncentiveRewards(address,address,uint256[])\":{\"notice\":\"User's unclaimed rewards for provided programs for product after settle\"},\"userPosition(address,address)\":{\"notice\":\"User pre-position and position for product after settle\"}},\"notice\":\"All functions should be called using `callStatic`\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lens/PerennialLens.sol\":\"PerennialLens\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [xa[r]scLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LsTOtfDnca[r]Iulc] jmul[jul] VcTOcul jmul\",\"stackAllocation\":true}},\"runs\":1},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@equilibria/emptyset-batcher/batcher/Batcher.sol\":{\"keccak256\":\"0xaa999f733fa0ff0f971027654ef9f577143bb63f6eabaaf308ccdcac5ebf5031\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://694f016fb6f2e82f96bd130cb3e74060f2aea3a6ecd44335f9b1511d356854f9\",\"dweb:/ipfs/QmaDBWb1K11H5TUL9Mw1ZcdU77816n8JJ7N6mPmrBJ984X\"]},\"@equilibria/emptyset-batcher/interfaces/IBatcher.sol\":{\"keccak256\":\"0x5d49c13991d92df22f77377b4ae98149bdfb588e04a084e00feec70569499c8b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://560b144cf81c05e86b81a37b696467a846ae9663c0b89234ca9f3ce16390c25e\",\"dweb:/ipfs/QmeMu3DYiacN81ZFYmBWnqQCi9ouZ1EoqaRHSWAaygpSRw\"]},\"@equilibria/perennial-oracle/contracts/interfaces/IOracleProvider.sol\":{\"keccak256\":\"0xde0f20d468ba8b91addfc356e13f2c74a4dc8abe68be323942217c723775d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a0b0ac97b512059cde8dae4c46391389075ff0fae475dead9ad5245c84c54271\",\"dweb:/ipfs/QmawgiGSqJ6ox8fSM9KVBPdwtjheGEytB7EpLDV1dqqey4\"]},\"@equilibria/root/control/unstructured/UInitializable.sol\":{\"keccak256\":\"0xd2743d8fcc220ed2ccdc0bba1db0a3e107741bd5c0cac47ca8c0b5a00ba2fd7f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://56aadd6e4d60dde940c2d1dd0f4d39aaca7666850a8af9f288c81cb36ef780d3\",\"dweb:/ipfs/QmSFeJURqupzavfsCTZJHQKDYDnzQnyGAA24oeDCDHpJz4\"]},\"@equilibria/root/control/unstructured/UOwnable.sol\":{\"keccak256\":\"0xce2d0f77aa8d80477524b6f00524e3f8dc06053eeca8464dd766dcb5fd69ecfa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://26d6187d0b1afa86b4b0cfbf5d02fbb81d68f5ff1ec6a5dc2488073d0f13ce20\",\"dweb:/ipfs/QmNd4wqhhbuQrLBaSUufTAZuTxaD9gw5nGhWiGweSyxVvA\"]},\"@equilibria/root/curve/CurveMath.sol\":{\"keccak256\":\"0x60d159f9ddf0dbe81124ecad58bba734b4cf82877637ff8d9d7f3e92f2da4ded\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://21ec7d55c7edb5e33a8448f90f8229a69e3ad88ce36f174515008ef6a01aa6d3\",\"dweb:/ipfs/QmNR72iJ8ayUBg8KiwDEdU5bsPf2UU9APPXG4bU1Ehq6zk\"]},\"@equilibria/root/curve/types/JumpRateUtilizationCurve.sol\":{\"keccak256\":\"0xae202813874bc306d51b3dab8194c86f6483bb20bf1f673ddaee16aa8de567ff\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://078af55f041677c10be7eb87c4c4d7683288b2c04b936bccca9929315b4e7b45\",\"dweb:/ipfs/QmbmQsXNmfVxL95qHFQiaEQpt8PHohnpLdd94T3THYFubF\"]},\"@equilibria/root/number/types/Fixed18.sol\":{\"keccak256\":\"0x613587461ef3437ef33229cdda7d34ea746278721baf06e20b2e43977f43174d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://630392f0e52d45747543e562ed58962bfa70c867031bdc2f304193072afbd618\",\"dweb:/ipfs/QmT1Zrvart6MYLvf4XqZUjm99L5AfuBcczV27ed3V4AvbW\"]},\"@equilibria/root/number/types/PackedFixed18.sol\":{\"keccak256\":\"0xb52960cc8e3132e45d342bbbb1c6a96219022cd8557997933bd8250170268b64\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d3dde781dcb4cd5b7aff0d1a2b5d38bd9a321afd371aed6f88e4b4b2bc2a5984\",\"dweb:/ipfs/QmYaAukn1c8tE21HC2N415XZxT1H8zMQeoUoxh3iJTgxyA\"]},\"@equilibria/root/number/types/PackedUFixed18.sol\":{\"keccak256\":\"0xb5c5cd32d6530b2fe75228b6be32ebcb7762f6d7988b85a6b85a289ce8256d51\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://162ccf052216233008e732f0059d7cfde5c0aa70a5d4cf6549b1840f2ea791cc\",\"dweb:/ipfs/QmT95S1UHQbsT2ehAG42tLw4RUwCGijQ4fTkndL126yJmE\"]},\"@equilibria/root/number/types/UFixed18.sol\":{\"keccak256\":\"0x8ebef1e6c717f565b9ed545a876b5692b4007e6485c99f39d363f7405e591792\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://eb72bd190425ef3165df4c255617dfccb494563b3f9953c91aa8c4619cce779f\",\"dweb:/ipfs/QmZdmxTZh8DtGZeE1xzrPxSDNnicRTXpPgG97AsbE3TA3C\"]},\"@equilibria/root/storage/UStorage.sol\":{\"keccak256\":\"0xe2b8491d1b5aa93f7e059e1a8f156b0ab37fef9ed973be97a64f2eabfc2cc172\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://67fd3b83c6e94369d5a75c8fbd15341c4f0c12d6612dc222bc4d82882c1c0f93\",\"dweb:/ipfs/QmNj8i2c5mZysTxoQWg2A21iWyYna6okSHQjHvp6ycQ1Mh\"]},\"@equilibria/root/token/types/Token18.sol\":{\"keccak256\":\"0x6b12afaece814f0ab186200a4729e93eb685a21d3e9b5a3372ff283a7ad5dc23\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e0118aeb6adc917b2ceadb82cc3a7a56d144ce4c8479296a4b288998c95e23e8\",\"dweb:/ipfs/QmcuREZS6RQU4brXKJ6cYE9dadqMJkrSrRDS7uEVau9eLJ\"]},\"@equilibria/root/token/types/Token6.sol\":{\"keccak256\":\"0x5ec7bee45a0e13f91ab2399472cf11136496073ad470cd70244855e12a7b6e65\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1aa85b4f3e8c72530bd1ef51445400ca646e1c809b9519f7ad8da588632a43b2\",\"dweb:/ipfs/QmS43PEuLdSaGrELtQ7wVg9wZB3NN2HbaSdDSy2GMxuofT\"]},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xc3d946432c0ddbb1f846a0d3985be71299df331b91d06732152117f62f0be2b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4632c341a06ba5c079b51ca5a915efab4e6ab57735b37839b3e8365ff806a43e\",\"dweb:/ipfs/QmTHT3xHYed2wajEoA5qu7ii2BxLpPhQZHwAhtLK5Z7ANK\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xc995bddbca1ae19788db9f8b61e63385edd3fddf89693b612d5abd1a275974d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab84f13e6e6e0823854a0cddd49e96df052092d5919f95587607f0ed28a64cb6\",\"dweb:/ipfs/QmbNtqAq23ZDjCzHukQaa7B3y6rcobscm6FZF5PMQXcnVr\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"contracts/interfaces/ICollateral.sol\":{\"keccak256\":\"0x6fb67eb5fc3ed4a74522677da3349d75105389369892756a60fcab4c901d352b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://af5a9b9bf3c72cb88230413966455cfcb0d43f88f1eeb52f8f083ca8cd46d55f\",\"dweb:/ipfs/Qmd8VjEoZpuY7CcDD942adQkwa9QVfyX6kEgBQ5gRymaMh\"]},\"contracts/interfaces/IContractPayoffProvider.sol\":{\"keccak256\":\"0xd73df106d032e976fd959ee6713240e36f54277ce5f215eaec8d5a2c6720a86b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b7932019acd64c5310eb266645d9bf9d13ba414ad4cbb8399b5c5fd5702d5d14\",\"dweb:/ipfs/QmVCXi3HXbGxm3kd6MsMULEFjtq8ecWvtREXnkgPgQFNnr\"]},\"contracts/interfaces/IController.sol\":{\"keccak256\":\"0xb6798b45b76edb91f6e56380eeeacdcfb37bbeb620a2d9c3e9993c39675bbd48\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://734265e658ee8f87a0a08471fcdc65d882f7dd49ee3efc5559b7c7282f619771\",\"dweb:/ipfs/QmYvK4xyECRyPtNhPybtMv3BKRuSZRi47WtaFruosn3Wfc\"]},\"contracts/interfaces/IIncentivizer.sol\":{\"keccak256\":\"0xd9d65d1190d830c8b797829f94194db86bb712e51f404e8c3e2c9b1df5645649\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d248dc35209163884a17bcd7c0b31cf2d2281937f1010b30a42cfad0a2e12b68\",\"dweb:/ipfs/QmWkBSxtdPt3NPMMfBe3z4xhARXR5X4yCXPzCddYwxqEcy\"]},\"contracts/interfaces/IMultiInvoker.sol\":{\"keccak256\":\"0xfbc93b818893aa6288297194b3750fe50da045440c08f865e09ba43e7d8a940c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://70200fd89f0fcd98c289ff631fedb25443f8d17d7bc7b5c8569faf255e7c05f1\",\"dweb:/ipfs/QmZLzC7tQsuVBzGrf39pMfjuQAn9FxhZEWppfAN3XNFQmU\"]},\"contracts/interfaces/IParamProvider.sol\":{\"keccak256\":\"0x81a0a433f1e74f92945bb9d11c31ebcde049e40ecdd8195f215364067948c19f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://47a98565b497abbc2b146ed162100c42d8de1a8de4177e8390d855aae3fb66d9\",\"dweb:/ipfs/QmTwxbN8xrfVpxfsqTLugchJBKiCCtfZ4QCcPeEEbWSXqt\"]},\"contracts/interfaces/IPayoffProvider.sol\":{\"keccak256\":\"0xb83d80d624aa9431763f80ecb4bf0214803e25334a7419d954f929e5d0ee7467\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f16b186a5424f44735d8ee59ddfa188bdee5691b3a4284d0d2c15cb9506accc3\",\"dweb:/ipfs/QmPa26YHbU2kweKyQKqAJfKCe4BfBzHa5AT5CSJQyLJHxx\"]},\"contracts/interfaces/IPerennialLens.sol\":{\"keccak256\":\"0xf2fc70de9255451a220d28a3c9c46b374a8b5bc70dad371d40152a893f1fb8d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f52dd2083d0819a50b9b64910e6fc1b5a974fe815dadffd0f7ce6e79845a5a8f\",\"dweb:/ipfs/QmUuaSxzNkuxmujTvbVCtqAhwas69grq8oHp4qtZ73VcFS\"]},\"contracts/interfaces/IProduct.sol\":{\"keccak256\":\"0x989e05ee3615af1b52d4dcf506af7ceff79625f8dfad2352958590a83cb15848\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a587f4cb90062432b9c81cddc4e1a06a46b13248e6a760101a65e8b9b891393d\",\"dweb:/ipfs/QmbT97NPPfxS7iXLyZPPiLkFFyAXxDphosQvWimhYKXey8\"]},\"contracts/interfaces/types/Accumulator.sol\":{\"keccak256\":\"0x7ccd0a72aa593cefb9f4337cf312799f357b82fcb3f0379de0dc503d1cb7e387\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://884ee8101d531f8f596620dbe6f513bdaea06c5d113865fabb26131320286341\",\"dweb:/ipfs/QmRKjXfdTPqErTBz4xFvZMTVX88jxKKw14f1rcfAF7Z2Mr\"]},\"contracts/interfaces/types/PackedAccumulator.sol\":{\"keccak256\":\"0xd83f2822d4f6c818087a232b54007730992c34ff77377fc307a282f886e7cf65\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0c9c635aa32e6feac02cd3d979f21dd01d70fce677da803958a5f7bf8262177d\",\"dweb:/ipfs/QmQnYbmci8WqyBNzvY7cer56Kwf9PU2Rt3GNn5rdzDQzRa\"]},\"contracts/interfaces/types/PackedPosition.sol\":{\"keccak256\":\"0x04968e6794f6244cb3415cea111d640273a81faea957872988d0cb580f45df1e\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://86c7a1c999d14ef22410bca74c51d3fbdf5ad0160a38eaad89c5e38361b981d0\",\"dweb:/ipfs/QmehdLThnFyoEv79C5xoSPmGFPxjmFvMjcCY94BD2iYmKN\"]},\"contracts/interfaces/types/PayoffDefinition.sol\":{\"keccak256\":\"0x5a89942d8fe02369b25a0ae18d00cc4ad654c1657167c58cb3669d1b3b49e36b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://24eabfd3e181f0c7e2aa3654061d3dadf6b2726b28f1ec7b86159f3b33e8c8fb\",\"dweb:/ipfs/QmVADyn8ULMqDhDuQPULhgRhThzgvtw2dCtjQEHAvQ8Nd4\"]},\"contracts/interfaces/types/PendingFeeUpdates.sol\":{\"keccak256\":\"0xef3eef16a3a30ec0328ebe75ccf8a12c36523c473fb81ee7c085c8164d612873\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://341887d996939055d4aba56136ce0efadd4bb6ef53459a098649666d9efc97f2\",\"dweb:/ipfs/Qme2YkyNwPv46d3ApDYWDKe87Fo9uSgWZZ77afZ8cixGiX\"]},\"contracts/interfaces/types/Position.sol\":{\"keccak256\":\"0x367918730021f3d6b7035f40c53b00b4316eb5e7fa409ed6285ba6d49971aab1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://46483854393228b729c6f0aafc419b3971e585e576d1493051fd1f276f14452d\",\"dweb:/ipfs/QmU7PMGN4WZftsQVUzPyucrCFELKhguHVTSTdFbuPwcoZd\"]},\"contracts/interfaces/types/PrePosition.sol\":{\"keccak256\":\"0x4d4443c34648f0352ed7c26ce8b837b6c7613169e53e95d92c8c59ee9e335692\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c5cd07e3d702a038cc8c99a609245df39c565c5585ca15037c2b47b572e07eac\",\"dweb:/ipfs/Qmca5QAqbKx9UU5Db1UrSuXtTuWQyjkTRDurFK7fLbPu1N\"]},\"contracts/interfaces/types/ProgramInfo.sol\":{\"keccak256\":\"0x280fcaf931b49abaec46b95ccbabaaf856a4b8e8d036413c9c3b3af25585d161\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e755bb9bb2fa8c2f2b20226c214cf7306dfa3d84c7cfc275104b7c546d86334b\",\"dweb:/ipfs/QmbFuHfUek97FYpVQF9hP9pUZUVyTaqejvpZAzbikFWVxn\"]},\"contracts/lens/PerennialLens.sol\":{\"keccak256\":\"0x6b26a16e02054d374d83ae4e864b564fa2233835e198dce43e15644b3f5679c4\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4478bb228526cd394132efd41e93b2aec03e3392d877142c9815a315ba0bf784\",\"dweb:/ipfs/Qmcw1GifU9YfWkJKPED4i6sqD7Vojj7chYZgm6MBTZDEXR\"]}},\"version\":1}",
  "bytecode": "0x60a080604052346200009e57601f62003f6e38819003918201601f19168301916001600160401b03831184841017620000a3578084926020946040528339810103126200009e57516001600160a01b03811681036200009e57608052604051613eb49081620000ba82396080518181816101f70152818161049c015281816106a001528181610ea101528181611504015281816121bc01526126370152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b6000803560e01c80630198489214611d18578063036790c014611cd95780630aae7a6b14611c945780630ba9d8ca14611c635780631e0c6fb914611bc0578063204e94b014611b70578063237e589914611b305780632651216014611aeb57806337e710ac14611aab578063540027e614611a7a5780636878353e146118fd5780636efef085146116e45780637e64cc131461148557806382df39de146114455780638e076924146113115780638e480b20146112885780638f5edc081461110c5780639711715a14610e365780639b9ac2cb14610df65780639bc0285714610ccb5780639be2a56714610bd3578063a5fdc5de14610ba1578063a86e357614610b5b578063b4d6f78114610b29578063b7648fb914610a94578063b7a98f9714610970578063cc218ece14610929578063d8dfeb45146108fb578063e9c6b4c1146107de578063edd8ca7b14610718578063f5c06e1b146106cf578063f77c47911461068b578063f8083f56146103f75763faaebd211461019657600080fd5b346103f4576020806003193601126103f0576001600160a01b03843581811695908690036102f257853b156103ec578451630476982d60e21b815284818381838b5af18015610387579085916103d7575b505084516361d027b360e01b81527f0000000000000000000000000000000000000000000000000000000000000000831696848284818b5afa9182156103cd579085918793610391575b5060248851809a81936316c04e5b60e11b8352878301525afa918215610387578592610348575b6024969750848461026761219e565b168951988980928863faaebd2160e01b9788845216868301525afa96871561033e578697610309575b50849291602491856102a061219e565b16908a519687958694855216908301525afa9283156102fe57926102ca575b508351928352820152f35b9080925081813d83116102f7575b6102e2818361208d565b810103126102f2575190386102bf565b600080fd5b503d6102d8565b8551903d90823e3d90fd5b9096508481819493943d8311610337575b610324818361208d565b810103126102f257519590919084610290565b503d61031a565b88513d88823e3d90fd5b91508387813d8311610380575b61035f818361208d565b8101031261037c5761037360249697612259565b91879650610258565b8480fd5b503d610355565b86513d87823e3d90fd5b8281939294503d83116103c6575b6103a9818361208d565b810103126103c2576103bb8591612259565b9138610231565b8580fd5b503d61039f565b87513d88823e3d90fd5b816103e19161208d565b6103ec5783386101e7565b8380fd5b5080fd5b80fd5b5090346103f05760603660031901126103f0576001600160a01b039280358481169391908481036102f25760243592868416918285036102f2576044356001600160401b0381116106875761044f9036908601612158565b939097813b156103ec578391602483928a51948593849263f667f89760e01b84528b8401525af1801561067d57908391610668575b50508551631bf1901f60e21b815294602093848787817f00000000000000000000000000000000000000000000000000000000000000008e165afa96871561065e57849761062f575b506104d781613c0c565b986104e182613c0c565b9a855b8381106104fd578a51806104f98f8f836120dd565b0390f35b8982168561052e8b8e610511868a8a61243c565b35905180938192632c3e50e560e01b835260c09687958401613c93565b0381865afa91821561062557928f8f9486888f968f908f9761055e95608093926105f8575b505001511692612462565b52888d61058a61056f888c8c61243c565b3596519687958694859463337c0b1760e11b86528501613cae565b03915afa9081156105ee57908e929189916105b9575b506105ae826105b494612462565b52612417565b6104e4565b8093508a8092503d83116105e7575b6105d2818361208d565b810103126102f25790518d91906105ae6105a0565b503d6105c8565b8c513d8a823e3d90fd5b6106179250803d1061061e575b61060f818361208d565b810190613c3e565b3880610553565b503d610605565b8e513d8c823e3d90fd5b610650919750853d8711610657575b610648818361208d565b81019061223a565b95386104cd565b503d61063e565b88513d86823e3d90fd5b816106729161208d565b6103f0578138610484565b87513d85823e3d90fd5b8280fd5b5090346103f057816003193601126103f057517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b508290346103f457826003193601126103f457506001600160a01b0391903582811681036102f25760243592831683036102f25760209261070f9161392c565b90519015158152f35b50346103f45760203660031901126103f4575081356001600160a01b038116928382036102f25760006020845161074f868261208d565b8281520152833b156102f257825193848092630476982d60e21b82526000968780945af180156107d157936107af9291816104f9966107c1575b50508361079e61079884613cd0565b93613dca565b0151908082126107ba575090613631565b905191829182612188565b0390613631565b6107ca9161208d565b3881610789565b50505051903d90823e3d90fd5b50346103f457816003193601126103f457506001600160a01b03908235828116908190036102f2576024359283168093036102f257600060208351610823858261208d565b8281520152823b156102f257815163f667f89760e01b815284810182905260009490858160248183895af180156108f1576108d8575b5090602483928351958693849263b7648fb960e01b84528301525afa9182156108ce578392610890575b8151806104f98582612188565b908092503d83116108c7575b6108a6818361208d565b81019282828503126103f457506104f9926108c0916132c0565b9038610883565b503d61089c565b81513d85823e3d90fd5b856108e88594939760249361208d565b95919250610859565b84513d88823e3d90fd5b5090346103f057816003193601126103f05760209061091861219e565b90516001600160a01b039091168152f35b508290346103f457826003193601126103f457506001600160a01b0391903582811681036102f25760243592831683036102f2576020926109699161369a565b9051908152f35b50346103f457816003193601126103f4575081356001600160a01b03818116918290036102f257602435908116918282036102f2576000602085516109b5878261208d565b8281520152823b156102f257835163f667f89760e01b815285810182905260009590868160248183895af18015610a8a57610a71575b5090602485928351958693849263b7648fb960e01b84528301525afa9182156107d1578492610a28575b50906104f9938361079e6107af94613dca565b909150823d8411610a6a575b610a3e818361208d565b810190838183031261037c57938361079e610a606107af95946104f9986132c0565b9450505093610a15565b503d610a34565b86610a818794939860249361208d565b969192506109eb565b86513d89823e3d90fd5b508290346103f45760203660031901126103f457508035906001600160a01b038216908183036102f257600060208551610ace878261208d565b8281520152813b156102f2578351630476982d60e21b8152916000918391829084905af18015610b1e57916107af916104f99493610b0d575b50613cd0565b6000610b189161208d565b84610b07565b83513d6000823e3d90fd5b508290346103f45760203660031901126103f4575035906001600160a01b03821682036102f25761096960209261323c565b508290346103f45760203660031901126103f4575035906001600160a01b03821682036102f257610b8e6104f992612d87565b9051918291602083526020830190611d7f565b508290346103f45760203660031901126103f4575035906001600160a01b03821682036102f257610969602092613173565b50346103f457816003193601126103f457506001600160a01b03908235828116908190036102f2576024359283168093036102f257610c10612328565b50823b156102f257815163f667f89760e01b815284810182905260009490858160248183895af180156108f157610cb1575b5090602460a09284519586938492631e0c6fb960e01b84528301525afa9182156108ce5760a09392610c7e575b50610c7c90518092611da4565bf35b610c7c919250610ca390843d8111610caa575b610c9b818361208d565b8101906132ea565b9190610c6f565b503d610c91565b85610cc260a094939760249361208d565b95919250610c42565b508290346103f457602091826003193601126103f05780356001600160401b03811161068757610cfd91369101612158565b9190610d08836120c6565b92610d158651948561208d565b808452601f19610d24826120c6565b0185845b828110610de057505050825b818110610d975750505083519280840190808552835180925280868601968360051b870101940192955b828710610d6b5785850386f35b909192938280610d87600193603f198a82030186528851611fc6565b9601920196019592919092610d5e565b610da281838561243c565b356001600160a01b038116810361037c5790610dc0610ddb92612476565b610dca8288612462565b52610dd58187612462565b50612417565b610d34565b610de8612376565b828289010152018690610d28565b508290346103f457826003193601126103f457506001600160a01b0391903582811681036102f25760243592831683036102f257602092610969916139b0565b509134610687578260031936011261068757815191610e5660e08461208d565b83835260209081840192858452818501918683526060860191878352608087019388855260a088019589875260c08901978a895260018060a01b039384610e9b61219e565b168b52847f0000000000000000000000000000000000000000000000000000000000000000168c8751631bf1901f60e21b815285818581865afa91821561104e579088926110ef575b501683528c828588610ef461219e565b168a5192838092637e062a3560e11b82525afa91821561104e579088926110b3575b5016855286516358710f4560e11b81528d9085818581865afa91821561104e5791611086575b5088528651630a36a36360e41b81528d9085818581865afa91821561104e5791611059575b5089528651632e8b7a6f60e21b81528d9085818581865afa91821561104e579086939261101f575b508b528751635c975abb60e01b815292839182905afa908115611015579085929160e09d91610fe8575b5015158a528186519b51168b525116908901525116908601525160608501525160808401525160a083015251151560c0820152f35b6110089150843d861161100e575b611000818361208d565b81019061226d565b38610fb3565b503d610ff6565b86513d8e823e3d90fd5b83819492503d8311611047575b611036818361208d565b810103126102f25784915138610f89565b503d61102c565b8951903d90823e3d90fd5b90508481813d831161107f575b611070818361208d565b810103126102f2575138610f61565b503d611066565b90508481813d83116110ac575b61109d818361208d565b810103126102f2575138610f3c565b503d611093565b809250868092503d83116110e8575b6110cc818361208d565b810103126110e4576110de8791612259565b38610f16565b8d80fd5b503d6110c2565b6111069150863d881161065757610648818361208d565b38610ee4565b5082346103f057826003193601126103f0578035906001600160a01b039081831683036102f257602435906001600160401b03821161037c573660238301121561037c578101359361115d856120c6565b9161116a8751938461208d565b85835260209560248785019160051b830101913683116103ec57602401905b8282106112705750505081519561119f876120c6565b966111ac8251988961208d565b8088526111bb601f19916120c6565b0186835b82811061125a57505050815b835181101561121057806111f6866111e661120b9488612462565b5116886111f161292c565b6129b2565b611200828b612462565b52610dd5818a612462565b6111cb565b815187815288518189018190528989019190818501908a875b8281106112365784840385f35b909192826102208261124b6001948a51611f0b565b01960191019492919094611229565b61126261292c565b82828c0101520187906111bf565b813586811681036102f2578152908701908701611189565b508290346103f45760203660031901126103f457508035906001600160a01b038216908183036102f2576112ba612285565b50813b156102f2578351630476982d60e21b8152916000918391829084905af18015610b1e5760609392610c7c926112f792611300575b50613dca565b91518092611fad565b600061130b9161208d565b856112f1565b50346103f45760603660031901126103f45782356001600160a01b0381811694918590036102f257602435908116948582036102f257853b156103ec5784519063f667f89760e01b8252838201528381602481838a5af1801561143b5790859291611421575b506113a7939291611389602092613dca565b015183811261141a575b670de0b6b3a7640000948591604435613687565b0495855192838092636c376cc560e01b82525afa91821561140f57916113dd575b506113d590602094613687565b049051908152f35b90506020813d8211611407575b816113f76020938361208d565b810103126102f2575160206113c8565b3d91506113ea565b8451903d90823e3d90fd5b8303611393565b848092935061142f9161208d565b61068757839038611377565b85513d86823e3d90fd5b508290346103f457826003193601126103f457506001600160a01b0391903582811681036102f25760243592831683036102f25760209261070f91613872565b509190346106875780600319360112610687576001600160a01b03928235848116908181036102f25760243590868216928383036102f257833b1561037c5785519063f667f89760e01b825287820152848160248183885af18015610387579085916116cf575b50508451631bf1901f60e21b815260209290838189817f00000000000000000000000000000000000000000000000000000000000000008d165afa9081156103cd5790899187916116b2575b5016908651946302ec2f6d60e11b8652888601528385602481855afa9485156103cd578695611683575b5061156c85613c0c565b9761157686613c0c565b99875b87811061158e578951806104f98e8e836120dd565b8951632c3e50e560e01b815260c0908181806115ad868a8a8401613c93565b03818a5afa918215611679579160809185938d9261165c575b50500151166115d5828d612462565b52895163337c0b1760e11b81528781806115f3858b8a8a8501613cae565b0381895afa90811561165257908d92918b9161161d575b506105ae8261161894612462565b611579565b809350898092503d831161164b575b611636818361208d565b810103126102f25790518c91906105ae61160a565b503d61162c565b8b513d8c823e3d90fd5b6116729250803d1061061e5761060f818361208d565b38806115c6565b8c513d8d823e3d90fd5b9094508381813d83116116ab575b61169b818361208d565b810103126102f257519338611562565b503d611691565b6116c99150853d871161065757610648818361208d565b38611538565b816116d99161208d565b6103ec5783386114ec565b50913461068757816003193601126106875780356001600160a01b03811692908390036102f25760248035926001600160401b0384116103c257366023850112156103c2578381013594611737866120c6565b946117448551968761208d565b868652602096848888019160051b830101913683116118f95785899101915b8383106118e95750505050803b156118db578351630476982d60e21b815287908181858183875af180156118df576118c6575b50508451946117a4866120c6565b956117b18651978861208d565b8087526117c0601f19916120c6565b0187895b8281106118b057505050875b8151811015611867576117e38183612462565b51865190637ece075d60e01b82528582015260609081818881885afa91821561185d579061182b9392918c92611830575b5050611820828a612462565b52610dd58189612462565b6117d0565b61184f9250803d10611856575b611847818361208d565b81019061340c565b3880611814565b503d61183d565b88513d8d823e3d90fd5b85518881528751818a01819052888a019190818901908b8d5b82811061188d5784840385f35b909192826060826118a16001948a51611fad565b01960191019492919094611880565b6118b8612285565b82828b0101520188906117c4565b816118d09161208d565b6118db578638611796565b8680fd5b86513d84823e3d90fd5b8235815291810191899101611763565b8980fd5b509190346106875780600319360112610687576001600160a01b0392823584811691908290036103f4576024359485168095036103f45761193c612328565b50806020845161194c868261208d565b8281520152843b156103f457825163f667f89760e01b81528481018390528181602481838a5af18015611a7057611a60575b5090825193631e0c6fb960e01b8552818186015260a085602481895afa948515611a56578395611a2f575b5090602484928351978893849263b7648fb960e01b84528301525afa938415611a235781946119e3575b50506104f9905192839283611dd0565b90918094503d8511611a1c575b6119fa818361208d565b81019184828403126103f457506104f991611a14916132c0565b9290386119d3565b503d6119f0565b509051903d90823e3d90fd5b8492919550611a4d60249160a03d8111610caa57610c9b818361208d565b959192506119a9565b84513d85823e3d90fd5b81611a6a9161208d565b3861197e565b84513d84823e3d90fd5b5091346106875760203660031901126106875735916001600160a01b03831683036103f457506109696020926134d4565b5091346106875781600319360112610687576001600160a01b039290359083821682036103f45760243593841684036103f457506020926109699161374d565b5091346106875760203660031901126106875735916001600160a01b03831683036103f45750611b1d6104f992612476565b9051918291602083526020830190611fc6565b5091346106875781600319360112610687576001600160a01b039290359083821682036103f45760243593841684036103f4575060209261096991613a3f565b5091346106875781600319360112610687576001600160a01b039290359083821682036103f45760243593841684036103f45750611bb761022093610c7c926111f161292c565b91518092611f0b565b509190346106875760203660031901126106875781356001600160a01b038116908190036103ec57611bf0612328565b50803b156103ec578151630476982d60e21b815284908181868183875af18015611a7057611c4c575b505060a0908251938480926359ea287d60e01b82525afa9182156108ce5760a09392610c7e5750610c7c90518092611da4565b60a092955081611c5b9161208d565b939038611c19565b5091346106875760203660031901126106875735916001600160a01b03831683036103f4575061096960209261343f565b5091346106875760203660031901126106875735916001600160a01b03831683036103f45750611cc66104f992612dca565b9051918291602083526020830190611e14565b5091346106875760203660031901126106875735916001600160a01b03831683036103f45750611d0b6104f99261332d565b9290915192839283611dd0565b5091346106875760203660031901126106875735916001600160a01b03831683036103f45750610b8e6104f992612d37565b918091926000905b828210611d6a575011611d63575050565b6000910152565b91508060209183015181860152018291611d52565b90602091611d9881518092818552858086019101611d4a565b601f01601f1916010190565b602060406080928051855282808201518051828801520151828601520151805160608501520151910152565b909291602060c091611de68460e0810197611da4565b805160a08501520151910152565b60021115611dfe57565b634e487b7160e01b600052602160045260246000fd5b906101e0611e40611e2e8451610200808652850190611d7f565b60208501518482036020860152611d7f565b9260408101518051611e5181611df4565b60408501526020810151611e6481611df4565b6060850152604061ffff1991015116608084015260018060a01b0360608201511660a0840152608081015160c084015260a081015160e084015260c081015190610100918285015260e081015191610120928386015281015191610140928386015281015161016085015201518051600f0b6101808401526020810151600f0b6101a08401526040810151600f0b6101c0840152606060018060801b039101511691015290565b6102009060018060a01b0380825116845260208201511660208401526040810151604084015260608101516060840152611f4d60808201516080850190611da4565b60a08101519060208251926101209384870152015191610140928386015260c0820151151561016086015260e08201511515610180860152602061010083015180516101a088015201516101c08601528101516101e08501520151910152565b6040809180518452602081015160208501520151910152565b906102806020610180611fe285516102a0808752860190611e14565b9460018060a01b03838201511683860152604081015160408601526060810151606086015261201960808201516080870190611fad565b60a081015160e086015260c081015161010090818701528360e08301519161012092838901528301519161205361014093848a0190611da4565b83015180516101e0890152015161020087015281015161022086015261016081015161024086015201518051610260850152015191015290565b601f909101601f19168101906001600160401b038211908210176120b057604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116120b05760051b60200190565b6040810190604081528251809252606081019160208094019060005b81811061213b575050508281830391015281808451928381520193019160005b828110612127575050505090565b835185529381019392810192600101612119565b82516001600160a01b0316855293850193918501916001016120f9565b9181601f840112156102f2578235916001600160401b0383116102f2576020808501948460051b0101116102f257565b9190916020806040830194805184520151910152565b60405163d8dfeb4560e01b81526001600160a01b03906020816004817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561222e576000916121f4575b50905090565b6020813d8211612226575b8161220c6020938361208d565b810103126103f0575191821682036103f4575080386121ee565b3d91506121ff565b6040513d6000823e3d90fd5b908160209103126102f257516001600160a01b03811681036102f25790565b51906001600160a01b03821682036102f257565b908160209103126102f2575180151581036102f25790565b6040519061229460608361208d565b60006040838281528260208201520152565b604051906122b66101608361208d565b8160608152606060208201526122ca612285565b60408201526101406000918260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201526040519261231060808561208d565b80845280602085015280604085015260608401520152565b604090815161233860608261208d565b809260008252805161234a828261208d565b60008152600060208201526020830152805191612367828461208d565b60008352600060208401520152565b6040908151916123886101a08461208d565b610180836123946122a6565b8152600080602083015280848301528060608301526123b1612285565b60808301528060a08301528060c08301528060e08301526123d0612328565b61010083015283516123e2858261208d565b818152816020820152610120830152806101408301528061016083015261240b8451948561208d565b80845260208401520152565b60001981146124265760010190565b634e487b7160e01b600052601160045260246000fd5b919081101561244c5760051b0190565b634e487b7160e01b600052603260045260246000fd5b805182101561244c5760209160051b010190565b9061247f612376565b6001600160a01b03928381166000813b156103f457604091825196630476982d60e21b9283895260049881818b8183885af180156118df57829061291c575b50506124c986612dca565b875260209083828901526124dc8761343f565b868901526124e9876134d4565b60608901526124f6612285565b50833b156102f25785518581526000818c8183895af1801561289a5761290b575b5061252187613dca565b60808901528551636c376cc560e01b815282818c81885afa90811561287f5782916128de575b5060a089015261255687613173565b60c08901526125648761323c565b60e0890152612571612328565b50833b156102f257855185815260009081818d81838a5af180156128205782906128ce575b505086516359ea287d60e01b815260a0818d81895afa9182156128c357916128a5575b5061010089015260008287516125cf898261208d565b8281520152833b156102f25785518581526000818c8183895af1801561289a57612889575b506125fe87613cd0565b610120890152833b156103f457855185815281818c8183895af1801561287f5790829161286a575b505085516361d027b360e01b8152907f0000000000000000000000000000000000000000000000000000000000000000841683838d81845afa92831561282057868d8692859661282a575b506024908b5194859384926316c04e5b60e11b84528301525afa9081156128205782916127eb575b50846126a361219e565b1692848d60248b51809781938b63faaebd2160e01b9788855216908301525afa9384156127e157908d86939285966127ad575b5090602491886126e461219e565b16908c51998a958694855216908301525afa9081156127a25790612774575b60009350610160890152610140880152845161271f868261208d565b8281520152803b156102f25782518097819382526000938480945af1958615611a235761275b949596612764575b509061079e61079884613cd0565b61018082015290565b8161276e9161208d565b3861274d565b508183813d831161279b575b61278a818361208d565b810103126102f25760009251612703565b503d612780565b8751903d90823e3d90fd5b9550509184813d83116127da575b6127c5818361208d565b810103126102f25792519284918d60246126d6565b503d6127bb565b89513d85823e3d90fd5b90508381813d8311612819575b612802818361208d565b810103126103f05761281390612259565b38612699565b503d6127f8565b88513d84823e3d90fd5b93949550505081813d8311612863575b612844818361208d565b8101031261068757908386602461285c8f9695612259565b9590612671565b503d61283a565b816128749161208d565b6103f4578038612626565b87513d84823e3d90fd5b60006128949161208d565b386125f4565b87513d6000823e3d90fd5b6128bd915060a03d8111610caa57610c9b818361208d565b386125b9565b8851903d90823e3d90fd5b6128d79161208d565b3881612596565b90508281813d8311612904575b6128f5818361208d565b810103126102f2575138612547565b503d6128eb565b60006129169161208d565b38612517565b6129259161208d565b38816124be565b60409081519161293e6101608461208d565b610140836000928382528360208301528381830152836060830152612961612328565b60808301528051612972828261208d565b84815284602082015260a08301528360c08301528360e08301526129988151918261208d565b838152836020820152610100820152826101208201520152565b6001600160a01b0393929091848216803b156102f257604080519163f667f89760e01b9788845284169260049184838301526000906024928281858183865af18015612cc2578390612cb2575b50508089528560208a0152612a14888861369a565b858a0152612a22888861374d565b60608a0152612a2f612328565b50803b156103f05784518b8152829087868201528381868183875af18015612ca857908491612c96575b50508551631e0c6fb960e01b815285810188905260a0818681865afa9182156127a25791612c78575b5060808a01528160208651612a97888261208d565b8281520152803b156103f0578451918b8352809287868201528181868183875af1801561287f57612c64575b50855163b7648fb960e01b8082528682018990529387828781875afa918215612c58578192612c1d575b505060a08b0152612afe8989613872565b151560c08b0152612b0f898961392c565b151560e08b01528060208751612b25898261208d565b8281520152813b156103f45785519b8c52809b87868201528181868183875af1801561287f57612c01575b505090849392918451968794859384528301525afa918215612bf7578792612bac575b5090612ba3949596612b889261079e86613dca565b610100850152612b9882826139b0565b610120850152613a3f565b61014082015290565b908092503d8311612bf0575b612bc2818361208d565b8101908281830312612bec5796612be2612b889392612ba39798996132c0565b9250969594612b73565b8780fd5b503d612bb8565b81513d89823e3d90fd5b86959493929c5081612c129161208d565b9a9091929338612b50565b909150873d8911612c51575b612c33818361208d565b81019188828403126103f4575090612c4a916132c0565b3880612aed565b503d612c29565b508751903d90823e3d90fd5b81935090612c719161208d565b8138612ac3565b612c90915060a03d8111610caa57610c9b818361208d565b38612a82565b612ca0925061208d565b818238612a59565b87513d86823e3d90fd5b612cbb9161208d565b38826129ff565b86513d85823e3d90fd5b6020818303126102f25780516001600160401b03918282116102f257019082601f830112156102f25781519081116120b05760405192612d16601f8301601f19166020018561208d565b818452602082840101116102f257612d349160208085019101611d4a565b90565b6040516306fdde0360e01b815290600090829060049082906001600160a01b03165afa90811561222e57600091612d6c575090565b612d34913d8091833e612d7f818361208d565b810190612ccc565b6040516395d89b4160e01b815290600090829060049082906001600160a01b03165afa90811561222e57600091612d6c575090565b519081600f0b82036102f257565b90612dd36122a6565b91612ddd81612d37565b8352612de881612d87565b602084810191909152604080516305d5c1cb60e01b81526001600160a01b0393841693606092600492909190848185818a5afa908115610b1e57600091613108575b508883015281516307dc0d1d60e41b8152858185818a5afa908115610b1e576000916130d2575b5016878401528051636c376cc560e01b81529484868481845afa9586156130c757600096613098575b506080958689015281516302e8b70960e51b815285818581855afa908115610b1e5760009161306b575b5060a08901528151633f1d071f60e21b815285818581855afa908115610b1e5760009161303e575b5060c089015281516343f0179b60e01b815285818581855afa908115610b1e57600091613011575b5060e08901528151631937756760e01b815285818581855afa908115610b1e5790879291600091612fdf575b506101208a0152825163a12e1b3360e01b815293849182905afa938415612fd457600094612f56575b5050505061014084015250565b8583813d8311612fcd575b612f6b818361208d565b8101031261037c5790839291612f838251978861208d565b612f8c83612dbc565b8752612f99818401612dbc565b90870152612fa8818301612dbc565b908601520151916001600160801b03831683036103f457508201528038808080612f49565b503d612f61565b50513d6000823e3d90fd5b9192508682813d831161300a575b612ff7818361208d565b810103126103f457509086915138612f20565b503d612fed565b908682813d8311613037575b613027818361208d565b810103126103f457505138612ef4565b503d61301d565b908682813d8311613064575b613054818361208d565b810103126103f457505138612ecc565b503d61304a565b908682813d8311613091575b613081818361208d565b810103126103f457505138612ea4565b503d613077565b90958582813d83116130c0575b6130af818361208d565b810103126103f45750519438612e7a565b503d6130a5565b82513d6000823e3d90fd5b8681813d8311613101575b6130e7818361208d565b810103126103f057519082821682036103f4575038612e51565b503d6130dd565b908582813d831161316c575b61311e818361208d565b810103126103f457835191613133878461208d565b8051600281101561068757835287810151600281101561068757838901528401519061ffff19821682036103f457508382015238612e2a565b503d613114565b6001600160a01b03908116803b156102f257604051630476982d60e21b815260009290838160048183875af180156132315761321c575b506020906131b661219e565b16916024604051809481936352fee2ef60e11b835260048301525afa91821561321057916131e2575090565b90506020813d8211613208575b816131fc6020938361208d565b810103126102f2575190565b3d91506131ef565b604051903d90823e3d90fd5b9261322a816020939561208d565b92906131aa565b6040513d86823e3d90fd5b6001600160a01b03908116803b156102f257604051630476982d60e21b815260009290838160048183875af18015613231576132ab575b5060209061327f61219e565b169160246040518094819363b4d6f78160e01b835260048301525afa91821561321057916131e2575090565b926132b9816020939561208d565b9290613273565b91908260409103126102f2576040516132da60408261208d565b6020808294805184520151910152565b9060a0828203126102f25761332590606060405193613309828661208d565b8051855261331a83602083016132c0565b6020860152016132c0565b604082015290565b602091613338612328565b506040918251613348848261208d565b60008082529401849052836001600160a01b038216803b156103c2578451630476982d60e21b815295808760048183865af1968715613400576004949596976133e9575b505060a0908651938480926359ea287d60e01b82525afa9485156133df5750936133bb575b50612d3490613cd0565b612d349193506133d89060a03d8111610caa57610c9b818361208d565b92906133b1565b51903d90823e3d90fd5b60a0929350816133f89161208d565b91903861338c565b508551903d90823e3d90fd5b908160609103126102f257604080519161342760608461208d565b80518352602081015160208401520151604082015290565b6001600160a01b038116803b156102f257604051630476982d60e21b815260009290838160048183875af18015613231576134b5575b506134a191613485602092613cd0565b90604051808095819463307648eb60e11b835260048301612188565b03915afa91821561321057916131e2575090565b91613485846134ca602094966134a19661208d565b9492505091613475565b6001600160a01b038116803b156102f257604051630476982d60e21b815260009290838160048183875af1801561323157613581575b5061351a91613485602092613cd0565b03915afa9182156132105791613550575b5061354c670de0b6b3a76400009161354683620151806135a0565b906135a0565b0590565b90506020813d8211613579575b8161356a6020938361208d565b810103126102f257513861352b565b3d915061355d565b91613485846135966020949661351a9661208d565b949250509161350a565b60008082138184136001600160ff1b0382821686820486111661360957600160ff1b928487129290831686850588121661361d578685871294058612908416166136095785900584129116166135f557500290565b634e487b7160e01b81526011600452602490fd5b634e487b7160e01b84526011600452602484fd5b634e487b7160e01b85526011600452602485fd5b906000602060405161364460408261208d565b828152015261366d670de0b6b3a764000091602083613664838751613687565b04940151613687565b046040519161367d60408461208d565b8252602082015290565b8060001904821181151516612426570290565b6001600160a01b03808316929190833b156102f257604051809463f667f89760e01b825281602460009788809487891660048401525af180156137285761370b575b50916020916134a1936136ed61219e565b1690604051809581948293636610c76760e11b845260048401613733565b918461371e6134a195939660209561208d565b94919350916136dc565b6040513d87823e3d90fd5b6001600160a01b0391821681529116602082015260400190565b6001600160a01b03918216803b156102f25760409182519363f667f89760e01b85526000911693846004820152818160248183875af18015611a7057613862575b509082519363245a240960e21b85528060048601526020908186602481865afa95861561143b578496613833575b508190602486518095819363ab582f2960e01b835260048301525afa93841561382a575082936137fa575b5050508082106137f5575090565b905090565b9080929350813d8311613823575b613812818361208d565b810103126102f257519038806137e7565b503d613808565b513d84823e3d90fd5b9095508181813d831161385b575b61384b818361208d565b810103126102f2575194816137bc565b503d613841565b8161386c9161208d565b3861378e565b6001600160a01b03808316929190833b156102f257604051809463f667f89760e01b825281602460009788809487891660048401525af180156137285761390f575b50916020916138e3936138c561219e565b169060405180958194829363416f9cef60e11b845260048401613733565b03915afa91821561321057916138f7575090565b612d34915060203d811161100e57611000818361208d565b91846139226138e395939660209561208d565b94919350916138b4565b906001600160a01b0390811690813b156102f25760405163f667f89760e01b8152921660048301819052600092838160248183875af180156132315761399b575b50602090602460405180948193630b194df360e31b835260048301525afa91821561321057916138f7575090565b926139a9816020939561208d565b929061396d565b6001600160a01b0391821690813b156102f25782906040519063f667f89760e01b82528160248160008098819516978860048401525af1801561323157613a2a575b506020906139fe61219e565b169160246040518094819363faaebd2160e01b835260048301525afa91821561321057916131e2575090565b92613a38816020939561208d565b92906139f2565b6001600160a01b03808316929190833b156102f25760009360248592604051968793849263f667f89760e01b8452871660048401525af192831561222e57612d3493613a8c575b50613a9d565b6000613a979161208d565b38613a86565b9190613aa88161332d565b809291505115613c04576020936040908151613ac4838261208d565b600080825296018690526001600160a01b038381169290833b15612bec57815163f667f89760e01b8152921660048301819052879283908181602481838a5af18015611a7057613bf0575b50508190602482518096819363b7648fb960e01b835260048301525afa928315613be5578293613ba0575b5061079e613b4794613dca565b602081015180613b9a575060208201519151613b6c670de0b6b3a76400008094613687565b918115613b8657613b8293949550519104613687565b0490565b634e487b7160e01b86526012600452602486fd5b93505050565b90809293503d8311613bde575b613bb7818361208d565b81019082818303126103ec57613bd6613b479594939261079e926132c0565b939450613b3a565b503d613bad565b5051903d90823e3d90fd5b613bfb92945061208d565b86918238613b0f565b506000925050565b90613c16826120c6565b613c23604051918261208d565b8281528092613c34601f19916120c6565b0190602036910137565b60c0818303126102f25760a0613c8b91613c6c60405194613c5f848761208d565b82518652602083016132c0565b6020850152606081015160408501526080810151606085015201612259565b608082015290565b6001600160a01b039091168152602081019190915260400190565b6001600160a01b03918216815291166020820152604081019190915260600190565b60206040918251613ce1848261208d565b60008082529201829052825163301fd1f560e21b81526001600160a01b03919091169290602081600481875afa908115613dbe579082918491613d8a575b506024825180968193639a427d0360e01b835260048301525afa928315613be5578293613d4d575b50505090565b9080929493503d8311613d83575b613d65818361208d565b810191818303126103ec57613d7b9293506132c0565b388080613d47565b503d613d5b565b9150506020813d8211613db6575b81613da56020938361208d565b810103126106875781905138613d1f565b3d9150613d98565b505051903d90823e3d90fd5b613dd2612285565b5060405163301fd1f560e21b81526001600160a01b039190911690602081600481855afa801561222e57600090613e4c575b60609150602460405180948193637ece075d60e01b835260048301525afa90811561222e57600091613e34575090565b612d34915060603d811161185657611847818361208d565b6020823d8211613e76575b81613e646020938361208d565b810103126103f4575060609051613e04565b3d9150613e5756fea2646970667358221220afc26def5ff2ae8802d02f50d0d8d146d723bc7cdd157bd7c064d299f6dd75ba64736f6c634300080f0033",
  "deployedBytecode": "0x6040608081526004908136101561001557600080fd5b6000803560e01c80630198489214611d18578063036790c014611cd95780630aae7a6b14611c945780630ba9d8ca14611c635780631e0c6fb914611bc0578063204e94b014611b70578063237e589914611b305780632651216014611aeb57806337e710ac14611aab578063540027e614611a7a5780636878353e146118fd5780636efef085146116e45780637e64cc131461148557806382df39de146114455780638e076924146113115780638e480b20146112885780638f5edc081461110c5780639711715a14610e365780639b9ac2cb14610df65780639bc0285714610ccb5780639be2a56714610bd3578063a5fdc5de14610ba1578063a86e357614610b5b578063b4d6f78114610b29578063b7648fb914610a94578063b7a98f9714610970578063cc218ece14610929578063d8dfeb45146108fb578063e9c6b4c1146107de578063edd8ca7b14610718578063f5c06e1b146106cf578063f77c47911461068b578063f8083f56146103f75763faaebd211461019657600080fd5b346103f4576020806003193601126103f0576001600160a01b03843581811695908690036102f257853b156103ec578451630476982d60e21b815284818381838b5af18015610387579085916103d7575b505084516361d027b360e01b81527f0000000000000000000000000000000000000000000000000000000000000000831696848284818b5afa9182156103cd579085918793610391575b5060248851809a81936316c04e5b60e11b8352878301525afa918215610387578592610348575b6024969750848461026761219e565b168951988980928863faaebd2160e01b9788845216868301525afa96871561033e578697610309575b50849291602491856102a061219e565b16908a519687958694855216908301525afa9283156102fe57926102ca575b508351928352820152f35b9080925081813d83116102f7575b6102e2818361208d565b810103126102f2575190386102bf565b600080fd5b503d6102d8565b8551903d90823e3d90fd5b9096508481819493943d8311610337575b610324818361208d565b810103126102f257519590919084610290565b503d61031a565b88513d88823e3d90fd5b91508387813d8311610380575b61035f818361208d565b8101031261037c5761037360249697612259565b91879650610258565b8480fd5b503d610355565b86513d87823e3d90fd5b8281939294503d83116103c6575b6103a9818361208d565b810103126103c2576103bb8591612259565b9138610231565b8580fd5b503d61039f565b87513d88823e3d90fd5b816103e19161208d565b6103ec5783386101e7565b8380fd5b5080fd5b80fd5b5090346103f05760603660031901126103f0576001600160a01b039280358481169391908481036102f25760243592868416918285036102f2576044356001600160401b0381116106875761044f9036908601612158565b939097813b156103ec578391602483928a51948593849263f667f89760e01b84528b8401525af1801561067d57908391610668575b50508551631bf1901f60e21b815294602093848787817f00000000000000000000000000000000000000000000000000000000000000008e165afa96871561065e57849761062f575b506104d781613c0c565b986104e182613c0c565b9a855b8381106104fd578a51806104f98f8f836120dd565b0390f35b8982168561052e8b8e610511868a8a61243c565b35905180938192632c3e50e560e01b835260c09687958401613c93565b0381865afa91821561062557928f8f9486888f968f908f9761055e95608093926105f8575b505001511692612462565b52888d61058a61056f888c8c61243c565b3596519687958694859463337c0b1760e11b86528501613cae565b03915afa9081156105ee57908e929189916105b9575b506105ae826105b494612462565b52612417565b6104e4565b8093508a8092503d83116105e7575b6105d2818361208d565b810103126102f25790518d91906105ae6105a0565b503d6105c8565b8c513d8a823e3d90fd5b6106179250803d1061061e575b61060f818361208d565b810190613c3e565b3880610553565b503d610605565b8e513d8c823e3d90fd5b610650919750853d8711610657575b610648818361208d565b81019061223a565b95386104cd565b503d61063e565b88513d86823e3d90fd5b816106729161208d565b6103f0578138610484565b87513d85823e3d90fd5b8280fd5b5090346103f057816003193601126103f057517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b508290346103f457826003193601126103f457506001600160a01b0391903582811681036102f25760243592831683036102f25760209261070f9161392c565b90519015158152f35b50346103f45760203660031901126103f4575081356001600160a01b038116928382036102f25760006020845161074f868261208d565b8281520152833b156102f257825193848092630476982d60e21b82526000968780945af180156107d157936107af9291816104f9966107c1575b50508361079e61079884613cd0565b93613dca565b0151908082126107ba575090613631565b905191829182612188565b0390613631565b6107ca9161208d565b3881610789565b50505051903d90823e3d90fd5b50346103f457816003193601126103f457506001600160a01b03908235828116908190036102f2576024359283168093036102f257600060208351610823858261208d565b8281520152823b156102f257815163f667f89760e01b815284810182905260009490858160248183895af180156108f1576108d8575b5090602483928351958693849263b7648fb960e01b84528301525afa9182156108ce578392610890575b8151806104f98582612188565b908092503d83116108c7575b6108a6818361208d565b81019282828503126103f457506104f9926108c0916132c0565b9038610883565b503d61089c565b81513d85823e3d90fd5b856108e88594939760249361208d565b95919250610859565b84513d88823e3d90fd5b5090346103f057816003193601126103f05760209061091861219e565b90516001600160a01b039091168152f35b508290346103f457826003193601126103f457506001600160a01b0391903582811681036102f25760243592831683036102f2576020926109699161369a565b9051908152f35b50346103f457816003193601126103f4575081356001600160a01b03818116918290036102f257602435908116918282036102f2576000602085516109b5878261208d565b8281520152823b156102f257835163f667f89760e01b815285810182905260009590868160248183895af18015610a8a57610a71575b5090602485928351958693849263b7648fb960e01b84528301525afa9182156107d1578492610a28575b50906104f9938361079e6107af94613dca565b909150823d8411610a6a575b610a3e818361208d565b810190838183031261037c57938361079e610a606107af95946104f9986132c0565b9450505093610a15565b503d610a34565b86610a818794939860249361208d565b969192506109eb565b86513d89823e3d90fd5b508290346103f45760203660031901126103f457508035906001600160a01b038216908183036102f257600060208551610ace878261208d565b8281520152813b156102f2578351630476982d60e21b8152916000918391829084905af18015610b1e57916107af916104f99493610b0d575b50613cd0565b6000610b189161208d565b84610b07565b83513d6000823e3d90fd5b508290346103f45760203660031901126103f4575035906001600160a01b03821682036102f25761096960209261323c565b508290346103f45760203660031901126103f4575035906001600160a01b03821682036102f257610b8e6104f992612d87565b9051918291602083526020830190611d7f565b508290346103f45760203660031901126103f4575035906001600160a01b03821682036102f257610969602092613173565b50346103f457816003193601126103f457506001600160a01b03908235828116908190036102f2576024359283168093036102f257610c10612328565b50823b156102f257815163f667f89760e01b815284810182905260009490858160248183895af180156108f157610cb1575b5090602460a09284519586938492631e0c6fb960e01b84528301525afa9182156108ce5760a09392610c7e575b50610c7c90518092611da4565bf35b610c7c919250610ca390843d8111610caa575b610c9b818361208d565b8101906132ea565b9190610c6f565b503d610c91565b85610cc260a094939760249361208d565b95919250610c42565b508290346103f457602091826003193601126103f05780356001600160401b03811161068757610cfd91369101612158565b9190610d08836120c6565b92610d158651948561208d565b808452601f19610d24826120c6565b0185845b828110610de057505050825b818110610d975750505083519280840190808552835180925280868601968360051b870101940192955b828710610d6b5785850386f35b909192938280610d87600193603f198a82030186528851611fc6565b9601920196019592919092610d5e565b610da281838561243c565b356001600160a01b038116810361037c5790610dc0610ddb92612476565b610dca8288612462565b52610dd58187612462565b50612417565b610d34565b610de8612376565b828289010152018690610d28565b508290346103f457826003193601126103f457506001600160a01b0391903582811681036102f25760243592831683036102f257602092610969916139b0565b509134610687578260031936011261068757815191610e5660e08461208d565b83835260209081840192858452818501918683526060860191878352608087019388855260a088019589875260c08901978a895260018060a01b039384610e9b61219e565b168b52847f0000000000000000000000000000000000000000000000000000000000000000168c8751631bf1901f60e21b815285818581865afa91821561104e579088926110ef575b501683528c828588610ef461219e565b168a5192838092637e062a3560e11b82525afa91821561104e579088926110b3575b5016855286516358710f4560e11b81528d9085818581865afa91821561104e5791611086575b5088528651630a36a36360e41b81528d9085818581865afa91821561104e5791611059575b5089528651632e8b7a6f60e21b81528d9085818581865afa91821561104e579086939261101f575b508b528751635c975abb60e01b815292839182905afa908115611015579085929160e09d91610fe8575b5015158a528186519b51168b525116908901525116908601525160608501525160808401525160a083015251151560c0820152f35b6110089150843d861161100e575b611000818361208d565b81019061226d565b38610fb3565b503d610ff6565b86513d8e823e3d90fd5b83819492503d8311611047575b611036818361208d565b810103126102f25784915138610f89565b503d61102c565b8951903d90823e3d90fd5b90508481813d831161107f575b611070818361208d565b810103126102f2575138610f61565b503d611066565b90508481813d83116110ac575b61109d818361208d565b810103126102f2575138610f3c565b503d611093565b809250868092503d83116110e8575b6110cc818361208d565b810103126110e4576110de8791612259565b38610f16565b8d80fd5b503d6110c2565b6111069150863d881161065757610648818361208d565b38610ee4565b5082346103f057826003193601126103f0578035906001600160a01b039081831683036102f257602435906001600160401b03821161037c573660238301121561037c578101359361115d856120c6565b9161116a8751938461208d565b85835260209560248785019160051b830101913683116103ec57602401905b8282106112705750505081519561119f876120c6565b966111ac8251988961208d565b8088526111bb601f19916120c6565b0186835b82811061125a57505050815b835181101561121057806111f6866111e661120b9488612462565b5116886111f161292c565b6129b2565b611200828b612462565b52610dd5818a612462565b6111cb565b815187815288518189018190528989019190818501908a875b8281106112365784840385f35b909192826102208261124b6001948a51611f0b565b01960191019492919094611229565b61126261292c565b82828c0101520187906111bf565b813586811681036102f2578152908701908701611189565b508290346103f45760203660031901126103f457508035906001600160a01b038216908183036102f2576112ba612285565b50813b156102f2578351630476982d60e21b8152916000918391829084905af18015610b1e5760609392610c7c926112f792611300575b50613dca565b91518092611fad565b600061130b9161208d565b856112f1565b50346103f45760603660031901126103f45782356001600160a01b0381811694918590036102f257602435908116948582036102f257853b156103ec5784519063f667f89760e01b8252838201528381602481838a5af1801561143b5790859291611421575b506113a7939291611389602092613dca565b015183811261141a575b670de0b6b3a7640000948591604435613687565b0495855192838092636c376cc560e01b82525afa91821561140f57916113dd575b506113d590602094613687565b049051908152f35b90506020813d8211611407575b816113f76020938361208d565b810103126102f2575160206113c8565b3d91506113ea565b8451903d90823e3d90fd5b8303611393565b848092935061142f9161208d565b61068757839038611377565b85513d86823e3d90fd5b508290346103f457826003193601126103f457506001600160a01b0391903582811681036102f25760243592831683036102f25760209261070f91613872565b509190346106875780600319360112610687576001600160a01b03928235848116908181036102f25760243590868216928383036102f257833b1561037c5785519063f667f89760e01b825287820152848160248183885af18015610387579085916116cf575b50508451631bf1901f60e21b815260209290838189817f00000000000000000000000000000000000000000000000000000000000000008d165afa9081156103cd5790899187916116b2575b5016908651946302ec2f6d60e11b8652888601528385602481855afa9485156103cd578695611683575b5061156c85613c0c565b9761157686613c0c565b99875b87811061158e578951806104f98e8e836120dd565b8951632c3e50e560e01b815260c0908181806115ad868a8a8401613c93565b03818a5afa918215611679579160809185938d9261165c575b50500151166115d5828d612462565b52895163337c0b1760e11b81528781806115f3858b8a8a8501613cae565b0381895afa90811561165257908d92918b9161161d575b506105ae8261161894612462565b611579565b809350898092503d831161164b575b611636818361208d565b810103126102f25790518c91906105ae61160a565b503d61162c565b8b513d8c823e3d90fd5b6116729250803d1061061e5761060f818361208d565b38806115c6565b8c513d8d823e3d90fd5b9094508381813d83116116ab575b61169b818361208d565b810103126102f257519338611562565b503d611691565b6116c99150853d871161065757610648818361208d565b38611538565b816116d99161208d565b6103ec5783386114ec565b50913461068757816003193601126106875780356001600160a01b03811692908390036102f25760248035926001600160401b0384116103c257366023850112156103c2578381013594611737866120c6565b946117448551968761208d565b868652602096848888019160051b830101913683116118f95785899101915b8383106118e95750505050803b156118db578351630476982d60e21b815287908181858183875af180156118df576118c6575b50508451946117a4866120c6565b956117b18651978861208d565b8087526117c0601f19916120c6565b0187895b8281106118b057505050875b8151811015611867576117e38183612462565b51865190637ece075d60e01b82528582015260609081818881885afa91821561185d579061182b9392918c92611830575b5050611820828a612462565b52610dd58189612462565b6117d0565b61184f9250803d10611856575b611847818361208d565b81019061340c565b3880611814565b503d61183d565b88513d8d823e3d90fd5b85518881528751818a01819052888a019190818901908b8d5b82811061188d5784840385f35b909192826060826118a16001948a51611fad565b01960191019492919094611880565b6118b8612285565b82828b0101520188906117c4565b816118d09161208d565b6118db578638611796565b8680fd5b86513d84823e3d90fd5b8235815291810191899101611763565b8980fd5b509190346106875780600319360112610687576001600160a01b0392823584811691908290036103f4576024359485168095036103f45761193c612328565b50806020845161194c868261208d565b8281520152843b156103f457825163f667f89760e01b81528481018390528181602481838a5af18015611a7057611a60575b5090825193631e0c6fb960e01b8552818186015260a085602481895afa948515611a56578395611a2f575b5090602484928351978893849263b7648fb960e01b84528301525afa938415611a235781946119e3575b50506104f9905192839283611dd0565b90918094503d8511611a1c575b6119fa818361208d565b81019184828403126103f457506104f991611a14916132c0565b9290386119d3565b503d6119f0565b509051903d90823e3d90fd5b8492919550611a4d60249160a03d8111610caa57610c9b818361208d565b959192506119a9565b84513d85823e3d90fd5b81611a6a9161208d565b3861197e565b84513d84823e3d90fd5b5091346106875760203660031901126106875735916001600160a01b03831683036103f457506109696020926134d4565b5091346106875781600319360112610687576001600160a01b039290359083821682036103f45760243593841684036103f457506020926109699161374d565b5091346106875760203660031901126106875735916001600160a01b03831683036103f45750611b1d6104f992612476565b9051918291602083526020830190611fc6565b5091346106875781600319360112610687576001600160a01b039290359083821682036103f45760243593841684036103f4575060209261096991613a3f565b5091346106875781600319360112610687576001600160a01b039290359083821682036103f45760243593841684036103f45750611bb761022093610c7c926111f161292c565b91518092611f0b565b509190346106875760203660031901126106875781356001600160a01b038116908190036103ec57611bf0612328565b50803b156103ec578151630476982d60e21b815284908181868183875af18015611a7057611c4c575b505060a0908251938480926359ea287d60e01b82525afa9182156108ce5760a09392610c7e5750610c7c90518092611da4565b60a092955081611c5b9161208d565b939038611c19565b5091346106875760203660031901126106875735916001600160a01b03831683036103f4575061096960209261343f565b5091346106875760203660031901126106875735916001600160a01b03831683036103f45750611cc66104f992612dca565b9051918291602083526020830190611e14565b5091346106875760203660031901126106875735916001600160a01b03831683036103f45750611d0b6104f99261332d565b9290915192839283611dd0565b5091346106875760203660031901126106875735916001600160a01b03831683036103f45750610b8e6104f992612d37565b918091926000905b828210611d6a575011611d63575050565b6000910152565b91508060209183015181860152018291611d52565b90602091611d9881518092818552858086019101611d4a565b601f01601f1916010190565b602060406080928051855282808201518051828801520151828601520151805160608501520151910152565b909291602060c091611de68460e0810197611da4565b805160a08501520151910152565b60021115611dfe57565b634e487b7160e01b600052602160045260246000fd5b906101e0611e40611e2e8451610200808652850190611d7f565b60208501518482036020860152611d7f565b9260408101518051611e5181611df4565b60408501526020810151611e6481611df4565b6060850152604061ffff1991015116608084015260018060a01b0360608201511660a0840152608081015160c084015260a081015160e084015260c081015190610100918285015260e081015191610120928386015281015191610140928386015281015161016085015201518051600f0b6101808401526020810151600f0b6101a08401526040810151600f0b6101c0840152606060018060801b039101511691015290565b6102009060018060a01b0380825116845260208201511660208401526040810151604084015260608101516060840152611f4d60808201516080850190611da4565b60a08101519060208251926101209384870152015191610140928386015260c0820151151561016086015260e08201511515610180860152602061010083015180516101a088015201516101c08601528101516101e08501520151910152565b6040809180518452602081015160208501520151910152565b906102806020610180611fe285516102a0808752860190611e14565b9460018060a01b03838201511683860152604081015160408601526060810151606086015261201960808201516080870190611fad565b60a081015160e086015260c081015161010090818701528360e08301519161012092838901528301519161205361014093848a0190611da4565b83015180516101e0890152015161020087015281015161022086015261016081015161024086015201518051610260850152015191015290565b601f909101601f19168101906001600160401b038211908210176120b057604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116120b05760051b60200190565b6040810190604081528251809252606081019160208094019060005b81811061213b575050508281830391015281808451928381520193019160005b828110612127575050505090565b835185529381019392810192600101612119565b82516001600160a01b0316855293850193918501916001016120f9565b9181601f840112156102f2578235916001600160401b0383116102f2576020808501948460051b0101116102f257565b9190916020806040830194805184520151910152565b60405163d8dfeb4560e01b81526001600160a01b03906020816004817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561222e576000916121f4575b50905090565b6020813d8211612226575b8161220c6020938361208d565b810103126103f0575191821682036103f4575080386121ee565b3d91506121ff565b6040513d6000823e3d90fd5b908160209103126102f257516001600160a01b03811681036102f25790565b51906001600160a01b03821682036102f257565b908160209103126102f2575180151581036102f25790565b6040519061229460608361208d565b60006040838281528260208201520152565b604051906122b66101608361208d565b8160608152606060208201526122ca612285565b60408201526101406000918260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201526040519261231060808561208d565b80845280602085015280604085015260608401520152565b604090815161233860608261208d565b809260008252805161234a828261208d565b60008152600060208201526020830152805191612367828461208d565b60008352600060208401520152565b6040908151916123886101a08461208d565b610180836123946122a6565b8152600080602083015280848301528060608301526123b1612285565b60808301528060a08301528060c08301528060e08301526123d0612328565b61010083015283516123e2858261208d565b818152816020820152610120830152806101408301528061016083015261240b8451948561208d565b80845260208401520152565b60001981146124265760010190565b634e487b7160e01b600052601160045260246000fd5b919081101561244c5760051b0190565b634e487b7160e01b600052603260045260246000fd5b805182101561244c5760209160051b010190565b9061247f612376565b6001600160a01b03928381166000813b156103f457604091825196630476982d60e21b9283895260049881818b8183885af180156118df57829061291c575b50506124c986612dca565b875260209083828901526124dc8761343f565b868901526124e9876134d4565b60608901526124f6612285565b50833b156102f25785518581526000818c8183895af1801561289a5761290b575b5061252187613dca565b60808901528551636c376cc560e01b815282818c81885afa90811561287f5782916128de575b5060a089015261255687613173565b60c08901526125648761323c565b60e0890152612571612328565b50833b156102f257855185815260009081818d81838a5af180156128205782906128ce575b505086516359ea287d60e01b815260a0818d81895afa9182156128c357916128a5575b5061010089015260008287516125cf898261208d565b8281520152833b156102f25785518581526000818c8183895af1801561289a57612889575b506125fe87613cd0565b610120890152833b156103f457855185815281818c8183895af1801561287f5790829161286a575b505085516361d027b360e01b8152907f0000000000000000000000000000000000000000000000000000000000000000841683838d81845afa92831561282057868d8692859661282a575b506024908b5194859384926316c04e5b60e11b84528301525afa9081156128205782916127eb575b50846126a361219e565b1692848d60248b51809781938b63faaebd2160e01b9788855216908301525afa9384156127e157908d86939285966127ad575b5090602491886126e461219e565b16908c51998a958694855216908301525afa9081156127a25790612774575b60009350610160890152610140880152845161271f868261208d565b8281520152803b156102f25782518097819382526000938480945af1958615611a235761275b949596612764575b509061079e61079884613cd0565b61018082015290565b8161276e9161208d565b3861274d565b508183813d831161279b575b61278a818361208d565b810103126102f25760009251612703565b503d612780565b8751903d90823e3d90fd5b9550509184813d83116127da575b6127c5818361208d565b810103126102f25792519284918d60246126d6565b503d6127bb565b89513d85823e3d90fd5b90508381813d8311612819575b612802818361208d565b810103126103f05761281390612259565b38612699565b503d6127f8565b88513d84823e3d90fd5b93949550505081813d8311612863575b612844818361208d565b8101031261068757908386602461285c8f9695612259565b9590612671565b503d61283a565b816128749161208d565b6103f4578038612626565b87513d84823e3d90fd5b60006128949161208d565b386125f4565b87513d6000823e3d90fd5b6128bd915060a03d8111610caa57610c9b818361208d565b386125b9565b8851903d90823e3d90fd5b6128d79161208d565b3881612596565b90508281813d8311612904575b6128f5818361208d565b810103126102f2575138612547565b503d6128eb565b60006129169161208d565b38612517565b6129259161208d565b38816124be565b60409081519161293e6101608461208d565b610140836000928382528360208301528381830152836060830152612961612328565b60808301528051612972828261208d565b84815284602082015260a08301528360c08301528360e08301526129988151918261208d565b838152836020820152610100820152826101208201520152565b6001600160a01b0393929091848216803b156102f257604080519163f667f89760e01b9788845284169260049184838301526000906024928281858183865af18015612cc2578390612cb2575b50508089528560208a0152612a14888861369a565b858a0152612a22888861374d565b60608a0152612a2f612328565b50803b156103f05784518b8152829087868201528381868183875af18015612ca857908491612c96575b50508551631e0c6fb960e01b815285810188905260a0818681865afa9182156127a25791612c78575b5060808a01528160208651612a97888261208d565b8281520152803b156103f0578451918b8352809287868201528181868183875af1801561287f57612c64575b50855163b7648fb960e01b8082528682018990529387828781875afa918215612c58578192612c1d575b505060a08b0152612afe8989613872565b151560c08b0152612b0f898961392c565b151560e08b01528060208751612b25898261208d565b8281520152813b156103f45785519b8c52809b87868201528181868183875af1801561287f57612c01575b505090849392918451968794859384528301525afa918215612bf7578792612bac575b5090612ba3949596612b889261079e86613dca565b610100850152612b9882826139b0565b610120850152613a3f565b61014082015290565b908092503d8311612bf0575b612bc2818361208d565b8101908281830312612bec5796612be2612b889392612ba39798996132c0565b9250969594612b73565b8780fd5b503d612bb8565b81513d89823e3d90fd5b86959493929c5081612c129161208d565b9a9091929338612b50565b909150873d8911612c51575b612c33818361208d565b81019188828403126103f4575090612c4a916132c0565b3880612aed565b503d612c29565b508751903d90823e3d90fd5b81935090612c719161208d565b8138612ac3565b612c90915060a03d8111610caa57610c9b818361208d565b38612a82565b612ca0925061208d565b818238612a59565b87513d86823e3d90fd5b612cbb9161208d565b38826129ff565b86513d85823e3d90fd5b6020818303126102f25780516001600160401b03918282116102f257019082601f830112156102f25781519081116120b05760405192612d16601f8301601f19166020018561208d565b818452602082840101116102f257612d349160208085019101611d4a565b90565b6040516306fdde0360e01b815290600090829060049082906001600160a01b03165afa90811561222e57600091612d6c575090565b612d34913d8091833e612d7f818361208d565b810190612ccc565b6040516395d89b4160e01b815290600090829060049082906001600160a01b03165afa90811561222e57600091612d6c575090565b519081600f0b82036102f257565b90612dd36122a6565b91612ddd81612d37565b8352612de881612d87565b602084810191909152604080516305d5c1cb60e01b81526001600160a01b0393841693606092600492909190848185818a5afa908115610b1e57600091613108575b508883015281516307dc0d1d60e41b8152858185818a5afa908115610b1e576000916130d2575b5016878401528051636c376cc560e01b81529484868481845afa9586156130c757600096613098575b506080958689015281516302e8b70960e51b815285818581855afa908115610b1e5760009161306b575b5060a08901528151633f1d071f60e21b815285818581855afa908115610b1e5760009161303e575b5060c089015281516343f0179b60e01b815285818581855afa908115610b1e57600091613011575b5060e08901528151631937756760e01b815285818581855afa908115610b1e5790879291600091612fdf575b506101208a0152825163a12e1b3360e01b815293849182905afa938415612fd457600094612f56575b5050505061014084015250565b8583813d8311612fcd575b612f6b818361208d565b8101031261037c5790839291612f838251978861208d565b612f8c83612dbc565b8752612f99818401612dbc565b90870152612fa8818301612dbc565b908601520151916001600160801b03831683036103f457508201528038808080612f49565b503d612f61565b50513d6000823e3d90fd5b9192508682813d831161300a575b612ff7818361208d565b810103126103f457509086915138612f20565b503d612fed565b908682813d8311613037575b613027818361208d565b810103126103f457505138612ef4565b503d61301d565b908682813d8311613064575b613054818361208d565b810103126103f457505138612ecc565b503d61304a565b908682813d8311613091575b613081818361208d565b810103126103f457505138612ea4565b503d613077565b90958582813d83116130c0575b6130af818361208d565b810103126103f45750519438612e7a565b503d6130a5565b82513d6000823e3d90fd5b8681813d8311613101575b6130e7818361208d565b810103126103f057519082821682036103f4575038612e51565b503d6130dd565b908582813d831161316c575b61311e818361208d565b810103126103f457835191613133878461208d565b8051600281101561068757835287810151600281101561068757838901528401519061ffff19821682036103f457508382015238612e2a565b503d613114565b6001600160a01b03908116803b156102f257604051630476982d60e21b815260009290838160048183875af180156132315761321c575b506020906131b661219e565b16916024604051809481936352fee2ef60e11b835260048301525afa91821561321057916131e2575090565b90506020813d8211613208575b816131fc6020938361208d565b810103126102f2575190565b3d91506131ef565b604051903d90823e3d90fd5b9261322a816020939561208d565b92906131aa565b6040513d86823e3d90fd5b6001600160a01b03908116803b156102f257604051630476982d60e21b815260009290838160048183875af18015613231576132ab575b5060209061327f61219e565b169160246040518094819363b4d6f78160e01b835260048301525afa91821561321057916131e2575090565b926132b9816020939561208d565b9290613273565b91908260409103126102f2576040516132da60408261208d565b6020808294805184520151910152565b9060a0828203126102f25761332590606060405193613309828661208d565b8051855261331a83602083016132c0565b6020860152016132c0565b604082015290565b602091613338612328565b506040918251613348848261208d565b60008082529401849052836001600160a01b038216803b156103c2578451630476982d60e21b815295808760048183865af1968715613400576004949596976133e9575b505060a0908651938480926359ea287d60e01b82525afa9485156133df5750936133bb575b50612d3490613cd0565b612d349193506133d89060a03d8111610caa57610c9b818361208d565b92906133b1565b51903d90823e3d90fd5b60a0929350816133f89161208d565b91903861338c565b508551903d90823e3d90fd5b908160609103126102f257604080519161342760608461208d565b80518352602081015160208401520151604082015290565b6001600160a01b038116803b156102f257604051630476982d60e21b815260009290838160048183875af18015613231576134b5575b506134a191613485602092613cd0565b90604051808095819463307648eb60e11b835260048301612188565b03915afa91821561321057916131e2575090565b91613485846134ca602094966134a19661208d565b9492505091613475565b6001600160a01b038116803b156102f257604051630476982d60e21b815260009290838160048183875af1801561323157613581575b5061351a91613485602092613cd0565b03915afa9182156132105791613550575b5061354c670de0b6b3a76400009161354683620151806135a0565b906135a0565b0590565b90506020813d8211613579575b8161356a6020938361208d565b810103126102f257513861352b565b3d915061355d565b91613485846135966020949661351a9661208d565b949250509161350a565b60008082138184136001600160ff1b0382821686820486111661360957600160ff1b928487129290831686850588121661361d578685871294058612908416166136095785900584129116166135f557500290565b634e487b7160e01b81526011600452602490fd5b634e487b7160e01b84526011600452602484fd5b634e487b7160e01b85526011600452602485fd5b906000602060405161364460408261208d565b828152015261366d670de0b6b3a764000091602083613664838751613687565b04940151613687565b046040519161367d60408461208d565b8252602082015290565b8060001904821181151516612426570290565b6001600160a01b03808316929190833b156102f257604051809463f667f89760e01b825281602460009788809487891660048401525af180156137285761370b575b50916020916134a1936136ed61219e565b1690604051809581948293636610c76760e11b845260048401613733565b918461371e6134a195939660209561208d565b94919350916136dc565b6040513d87823e3d90fd5b6001600160a01b0391821681529116602082015260400190565b6001600160a01b03918216803b156102f25760409182519363f667f89760e01b85526000911693846004820152818160248183875af18015611a7057613862575b509082519363245a240960e21b85528060048601526020908186602481865afa95861561143b578496613833575b508190602486518095819363ab582f2960e01b835260048301525afa93841561382a575082936137fa575b5050508082106137f5575090565b905090565b9080929350813d8311613823575b613812818361208d565b810103126102f257519038806137e7565b503d613808565b513d84823e3d90fd5b9095508181813d831161385b575b61384b818361208d565b810103126102f2575194816137bc565b503d613841565b8161386c9161208d565b3861378e565b6001600160a01b03808316929190833b156102f257604051809463f667f89760e01b825281602460009788809487891660048401525af180156137285761390f575b50916020916138e3936138c561219e565b169060405180958194829363416f9cef60e11b845260048401613733565b03915afa91821561321057916138f7575090565b612d34915060203d811161100e57611000818361208d565b91846139226138e395939660209561208d565b94919350916138b4565b906001600160a01b0390811690813b156102f25760405163f667f89760e01b8152921660048301819052600092838160248183875af180156132315761399b575b50602090602460405180948193630b194df360e31b835260048301525afa91821561321057916138f7575090565b926139a9816020939561208d565b929061396d565b6001600160a01b0391821690813b156102f25782906040519063f667f89760e01b82528160248160008098819516978860048401525af1801561323157613a2a575b506020906139fe61219e565b169160246040518094819363faaebd2160e01b835260048301525afa91821561321057916131e2575090565b92613a38816020939561208d565b92906139f2565b6001600160a01b03808316929190833b156102f25760009360248592604051968793849263f667f89760e01b8452871660048401525af192831561222e57612d3493613a8c575b50613a9d565b6000613a979161208d565b38613a86565b9190613aa88161332d565b809291505115613c04576020936040908151613ac4838261208d565b600080825296018690526001600160a01b038381169290833b15612bec57815163f667f89760e01b8152921660048301819052879283908181602481838a5af18015611a7057613bf0575b50508190602482518096819363b7648fb960e01b835260048301525afa928315613be5578293613ba0575b5061079e613b4794613dca565b602081015180613b9a575060208201519151613b6c670de0b6b3a76400008094613687565b918115613b8657613b8293949550519104613687565b0490565b634e487b7160e01b86526012600452602486fd5b93505050565b90809293503d8311613bde575b613bb7818361208d565b81019082818303126103ec57613bd6613b479594939261079e926132c0565b939450613b3a565b503d613bad565b5051903d90823e3d90fd5b613bfb92945061208d565b86918238613b0f565b506000925050565b90613c16826120c6565b613c23604051918261208d565b8281528092613c34601f19916120c6565b0190602036910137565b60c0818303126102f25760a0613c8b91613c6c60405194613c5f848761208d565b82518652602083016132c0565b6020850152606081015160408501526080810151606085015201612259565b608082015290565b6001600160a01b039091168152602081019190915260400190565b6001600160a01b03918216815291166020820152604081019190915260600190565b60206040918251613ce1848261208d565b60008082529201829052825163301fd1f560e21b81526001600160a01b03919091169290602081600481875afa908115613dbe579082918491613d8a575b506024825180968193639a427d0360e01b835260048301525afa928315613be5578293613d4d575b50505090565b9080929493503d8311613d83575b613d65818361208d565b810191818303126103ec57613d7b9293506132c0565b388080613d47565b503d613d5b565b9150506020813d8211613db6575b81613da56020938361208d565b810103126106875781905138613d1f565b3d9150613d98565b505051903d90823e3d90fd5b613dd2612285565b5060405163301fd1f560e21b81526001600160a01b039190911690602081600481855afa801561222e57600090613e4c575b60609150602460405180948193637ece075d60e01b835260048301525afa90811561222e57600091613e34575090565b612d34915060603d811161185657611847818361208d565b6020823d8211613e76575b81613e646020938361208d565b810103126103f4575060609051613e04565b3d9150613e5756fea2646970667358221220afc26def5ff2ae8802d02f50d0d8d146d723bc7cdd157bd7c064d299f6dd75ba64736f6c634300080f0033"
}
